类型错误:传递的 PeriodDtype 数据无效。改用`data.to_timestamp()`

ahb*_*bon 3 python datetime pandas

如何将date格式为的列转换2014-09为格式2014-09-01 00:00:00.000?以前的格式是从df['date'] = pd.to_datetime(df['date']).dt.to_period("M").

我使用df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S.000'),但它产生一个错误:TypeError: Passing PeriodDtype data is invalid. Use data.to_timestamp() instead。我也尝试使用pd.to_datetime(df['date']).dt.strftime('%Y-%m'),它会产生相同的错误。

jez*_*ael 5

第一个想法是将时间段转换为时间戳Series.to_timestamp,然后使用Series.dt.strftime

print (df)
      date
0  2014-09

print (df.dtypes)
date    period[M]
dtype: object

df['date'] = df['date'].dt.to_timestamp('s').dt.strftime('%Y-%m-%d %H:%M:%S.000')
print (df)
                      date
0  2014-09-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

或者简单地为每个值添加相同的最后一个值:

df['date'] = df['date'].dt.to_timestamp('s').dt.strftime('%Y-%m-%d %H:%M:%S').add('.000')
print (df)
                      date
0  2014-09-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

或者:

df['date'] = df['date'].dt.strftime('%Y-%m').add('-01 00:00:00.000')
print (df)
                      date
0  2014-09-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)