преобразовать 6-значный int в yyyymm в пандах - PullRequest
2 голосов
/ 11 ноября 2019

Я создал файл с тремя столбцами даты:

pd.DataFrame({'yyyymm':[199501],'yyyy':[1995],'mm':[1],'Address':['AL1'],'Number':[12]})
    yyyymm  yyyy    mm  Address Number
0   199501  1995    1   AL1     12

и сохранил его как файл:

df.to_csv('complete.csv')

Я прочитал в файле:

df=pd.read_csv('complete.csv')

и мои 3 столбца даты преобразуются в целые, а не в даты.

Я пытался преобразовать их обратно в даты с:

df['yyyymm']=df['yyyymm'].astype(str).dt.strftime('%Y%m')
df['yyyy']=df['yyyy'].dt.strftime('%Y')
df['mm']=df['mm'].dt.dtrftime('%m')

с ошибкой:

AttributeError: Can only use .dt accessor with datetimelike values

Очень странно, поскольку команда, которую я использовал для создания столбца даты и времени, была:

df['yyyymm']=df['col2'].dt.strftime('%Y%m')

Я что-то упустил? Как я могу преобразовать 6-значный столбец обратно в дату-время в ггггмм, 4-значный столбец в дату-время в гггг, а столбец в виде цифры в мм обратно в datetime?

1 Ответ

1 голос
/ 11 ноября 2019

Столбцы yyyymm и yyyy и mm являются целыми числами . Используя .astype(str), вы конвертируете их в строки. Но строка не имеет .dt.

. Вы можете использовать pd.to_datetime(..) [pandas-doc] , чтобы преобразовать их в объект даты и времени:

df['yyyymm'] = pd.<b>to_datetime(</b>df['yyyymm'].astype(str)<b>, format='%Y%m')</b>

Действительно, это дает нам:

>>> pd.to_datetime(df['yyyymm'].astype(str), format='%Y%m')
0   1995-01-01
Name: yyyymm, dtype: datetime64[ns]

То же самое можно сделать для столбцов yyyy и mm:

>>> pd.to_datetime(df['yyyy'].astype(str), format='%Y')
0   1995-01-01
Name: yyyy, dtype: datetime64[ns]
>>> pd.to_datetime(df['mm'].astype(str), format='%m')
0   1900-01-01
Name: mm, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...