Python TypeError:传递PeriodType数据无效。改为使用'data.to_timestamp()
如何将格式为Python TypeError:传递PeriodType数据无效。改为使用'data.to_timestamp(),python,pandas,datetime,Python,Pandas,Datetime,如何将格式为2014-09的date列转换为格式为2014-09-01 00:00:00.000?前面的格式从df['date']=pd.转换为_datetime(df['date']).dt.到_period(“M”) 我使用了df['date']=pd.to_datetime(df['date']).dt.strftime(“%Y-%m-%d%H:%m:%S.000”),但它生成了一个错误:TypeError:传递的PeriodDtype数据无效。改为使用data.to_timestamp(
2014-09
的date
列转换为格式为2014-09-01 00:00:00.000
?前面的格式从df['date']=pd.转换为_datetime(df['date']).dt.到_period(“M”)
我使用了
df['date']=pd.to_datetime(df['date']).dt.strftime(“%Y-%m-%d%H:%m:%S.000”)
,但它生成了一个错误:TypeError:传递的PeriodDtype数据无效。改为使用data.to_timestamp()
。我还尝试使用pd.to_datetime(df['date']).dt.strftime(“%Y-%m”)
,它会生成相同的错误。使用%f
毫秒
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S.%f')
示例代码是
df = pd.DataFrame({
'Date': ['2014-09-01 00:00:00.000']
})
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S.%f')
df
这将为您提供以下输出
Date
0 2014-09-01
要将期间内的2014-09
转换为2014-09-01 00:00:00.000
,我们可以执行以下操作
第一个想法是将周期转换为时间戳,然后使用: 或者简单地为每个值添加相同的最后一个值:
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
或:
尝试剥离最后3个数字
print(pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S.%f')[0][:-3])
输出:
2014-09-01 00:00:00.000
如果其他答案不起作用,你可以试试
df.index = pd.DatetimeIndex(df.date).to_period('s')
df.index
这将显示datetimeindex对象,其频率设置为“s”这将最终生成六个
0
s,但我只需要其中三个。您是否尝试使用2014-01
格式化日期?我刚刚试过你的代码,它生成TypeError:传递PeriodDtype数据无效。使用
data.to_timestamp()`代替`。我使用Python3。请注意,我需要使用2014-09
格式将2014-09-01 00:00:00.000
转换为2014-09-01
格式,您的方法工作得非常好,否则,我认为需要首先将时间戳转换为jezrael的解决方案。请问,[0]
代表什么?它是本系列的第一个元素
print(pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S.%f')[0][:-3])
2014-09-01 00:00:00.000
df.index = pd.DatetimeIndex(df.date).to_period('s')
df.index