使用assign和lambda将年和月列合并为1个日期列

时间:2017-03-15 23:06:18

标签: python pandas dataframe

我有一个包含以下列的Excel文件,我将其读入pandas数据帧:

Year    Month   Day   Hour
2012    1       1     0
2012    1       1     1
2012    1       1     2
2012    1       1     3`

我尝试使用以下代码将这3列组合成日期时间列:

df1 = df.assign(Dt = lambda row: datetime.datetime(row['Year'].astype(int), row['Month'].astype(int)...))

此代码提供以下错误:    Type Error: Cannot convert the series to (Type 'int')

我知道我可以将这些列组合成一个字符串,并使用strptime转换为datetime。但是我想在这里尝试理解我在分配和lambda方面做错了什么。

1 个答案:

答案 0 :(得分:0)

您的所有列都经过适当命名,可直接在pd.to_datetime

上使用df
df.assign(Dt=pd.to_datetime(df))

   Year  Month  Day  Hour                  Dt
0  2012      1    1     0 2012-01-01 00:00:00
1  2012      1    1     1 2012-01-01 01:00:00
2  2012      1    1     2 2012-01-01 02:00:00
3  2012      1    1     3 2012-01-01 03:00:00

简化为:

df.assign(Dt=pd.to_datetime)

From the docs

enter image description here

您认为,每行不会调用一次传递的callable。