我有一个看起来像这样的 DF“ltyc”:
month day wind_speed
0 1 1 11.263604
1 1 2 11.971495
2 1 3 11.989080
3 1 4 12.558736
4 1 5 11.850899
然后,我应用了一个 lambda 函数:
ltyc['date'] = pd.to_datetime(ltyc["month"], format='%m').apply(lambda dt: dt.replace(year=2020))
让它看起来像这样:
month day wind_speed date
0 1 1 11.263604 2020-01-01
1 1 2 11.971495 2020-01-01
2 1 3 11.989080 2020-01-01
3 1 4 12.558736 2020-01-01
4 1 5 11.850899 2020-01-01
除了,我需要它看起来像这样,这样日子也会改变......但我不知道如何格式化 lambda 语句来执行此操作,因为这正是我需要的。
month day wind_speed date
0 1 1 11.263604 2020-01-01
1 1 2 11.971495 2020-01-02
2 1 3 11.989080 2020-01-03
3 1 4 12.558736 2020-01-04
4 1 5 11.850899 2020-01-05
我试过这个:
ltyc['date'] = pd.to_datetime(ltyc["month"], format='%m%d').apply(lambda dt: dt.replace(year=2020))
我得到这个错误:
ValueError: time data '1' does not match format '%m%d' (match)
感谢您的帮助,因为我正在尝试找出 lambda 函数。
最佳答案
创建一个值为 2020
且名称为 year
的系列。将其连接到 ['month', 'day']
并传递给 pd.to_datetime
。只要您按 year, month, date
的顺序传递列名称的数据框,pd.to_datetime 就会将其转换为适当的日期时间系列。
@Allolz 建议:
ltyc['date'] = pd.to_datetime(ltyc[['day', 'month']].assign(year=2020))
Out[367]:
month day wind_speed date
0 1 1 11.263604 2020-01-01
1 1 2 11.971495 2020-01-02
2 1 3 11.989080 2020-01-03
3 1 4 12.558736 2020-01-04
4 1 5 11.850899 2020-01-05
或者您可以使用 reindex
创建子数据帧以传递给 pd.to_datetime
ltyc['date'] = pd.to_datetime(ltyc.reindex(['year','month','day'],
axis=1, fill_value=2020))
原创:
s = pd.Series([2020]*len(ltyc), name='year')
ltyc['date'] = pd.to_datetime(pd.concat([s, ltyc[['month','day']]], axis=1))
关于Pandas Lambda 函数格式月和日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63063875/