如何在熊猫中将月份数字转换为日期时间

时间:2020-03-10 17:37:21

标签: python pandas dataframe

我遵循了此线程中的说明,但是遇到了问题。

Converting month number to datetime in pandas

我认为这可能与我的数据框中有一个附加变量有关,但我不确定。这是我的数据框:

0 Month Temp
1 0     2
2 1     4
3 2     3

我想要的是:

0 Month    Temp
1 1990-01  2
2 1990-02  4
3 1990-03  3

这是我尝试过的:

df= pd.to_datetime('1990-' + df.Month.astype(int).astype(str) + '-1', format = '%Y-%m')

我收到此错误:

ValueError:时间数据1990-0-1与指定的格式不匹配

3 个答案:

答案 0 :(得分:0)

IIUC,我们可以手动创建日期时间对象,然后将其格式化为期望的输出:

m = np.where(df['Month'].eq(0), 
             df['Month'].add(1), df['Month']
).astype(int).astype(str)


df['date'] = pd.to_datetime(
        "1900" + "-" + pd.Series(m), format="%Y-%m"
    ).dt.strftime("%Y-%m")

print(df)

   Month  Temp     date
0      0     2  1900-01
1      1     4  1900-02
2      2     3  1900-03

答案 1 :(得分:0)

这是我为您提供的解决方案

import pandas as pd
Data = {
    'Month' : [1,2,3],
    'Temp' : [2,4,3]
}
data = pd.DataFrame(Data) 
data['Month']= pd.to_datetime('1990-' + data.Month.astype(int).astype(str) + '-1', format = '%Y-%m').dt.to_period('M')



    Month    Temp
0   1990-01   2
1   1990-02   4 
2   1990-03   3

如果您希望Month [0]表示1,则可以有条件地添加该数字

答案 2 :(得分:0)

尝试使用.dt.strftime()来显示日期,因为日期时间值默认情况下以%Y-%m-%d 00:00:00格式存储。

import pandas as pd

df= pd.DataFrame({'month':[1,2,3]})

df['date']=pd.to_datetime(df['month'], format="%m").dt.strftime('%Y-%m')

print(df)

您必须明确告诉熊猫在月份中加1,因为它们的范围是0-11,而不是1-12。

df=pd.DataFrame({'month':[11,1,2,3,0]})
df['date']=pd.to_datetime(df['month']+1, format='%m').dt.strftime('1990-%m')