Pandas не конвертирует определенные столбцы фрейма данных в datetimeindex

Мой фрейм данных до сих пор,  введите описание изображения здесь

и я пытаюсь преобразовать cols, который представляет собой список всех столбцов от 0 до 188 ( cols = list(hdata.columns[ range(0,188) ]) ), которые находятся в этом формате yyyy-mm, в datetimeIndex. Есть и другие несколько столбцов, которые являются строковыми именами и поэтому не могут быть преобразованы в dateTime, поэтому я попытался сделать это,

hdata[cols].columns = pd.to_datetime(hdata[cols].columns) #convert columns to **datetimeindex**

Но это не работает. Не могли бы вы понять, что здесь не так?

Изменить: лучший способ работать с этим типом данных - использовать метод Разделить-Применить-Объединить.

Шаг 1. Разделите данные, которые вы хотите выполнить, для определенной операции.

nonReqdf = hdata.iloc[:,188:].sort_index()
reqdf= reqdf.drop(['CountyName','Metro','RegionID','SizeRank'],axis=1)

Шаг 2: выполните операции. В моем случае он преобразовывал столбцы фрейма данных с годом и месяцами в datetimeIndex. И повторно дискретизируйте его ежеквартально.

reqdf.columns = pd.to_datetime(reqdf.columns)
reqdf = reqdf.resample('Q',axis=1).mean()
reqdf = reqdf.rename(columns=lambda x: str(x.to_period('Q')).lower()).sort_index() # renaming so that string is yyyy**q**<1/2/3/4> like 2012q1 or 2012q2 likewise

Шаг 3. Объедините два разделенных фрейма данных (можно использовать _ 7_, но это может зависеть от ваших требований)

reqdf = pd.concat([reqdf,nonReqdf],axis=1)

person Anurag Dhadse    schedule 19.08.2020    source источник


Ответы (1)


Чтобы изменить некоторые метки из индекса (будь то строки или столбцы), вам необходимо использовать df.rename, как в

for i in range(188):
    df.rename({df.columns[i]: pd.to_datetime(df.columns[i])},
        axis=1, inplace=True)

Или вы можете избежать зацикливания, построив полноразмерный индекс, чтобы покрыть все столбцы с помощью

df.columns = (
    pd.to_datetime(cols) # pass the list with strings to get a partial DatetimeIndex
    .append(df.columns.difference(cols)) # complete the index with the rest of the columns
)
person RichieV    schedule 19.08.2020
comment
При разделении фрейма данных nonReqdf и dfwithdate&time имеют 10730 строк. Строки добавляются после merge .. есть несколько дубликатов. Но одно дело в том, что слияние фрейма данных outer и inner создает один и тот же фрейм данных с 11208 строками. Слияние выполняется по индексу State и RegionName, но перед слиянием обе строки df были одинаковыми. - person Anurag Dhadse; 20.08.2020
comment
Ничего не обнаружено .MultiIndex([], names=['State', 'RegionName']) & проверка len дала мне длину 0 - person Anurag Dhadse; 20.08.2020
comment
Сделайте pd.concat([df1, df2], axis=1) вместо слияния, строки будут выровнены по индексу перед объединением - person RichieV; 20.08.2020
comment
Мне требовался concat, а нет merge - person Anurag Dhadse; 20.08.2020