Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:传递PeriodType数据无效。改为使用'data.to_timestamp()_Python_Pandas_Datetime - Fatal编程技术网

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