Pandas Lambda 函数格式月和日

标签 pandas date lambda

我有一个看起来像这样的 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/

相关文章:

python - 从 numpy、pandas 等大型模块中自动删除未使用的代码

python - 如何使用 pandas 从 csv 读取多行到单个数据帧行

Python Pandas 如果 B 列中的值 = 等于 [X, Y, Z] 将 A 列替换为 "T"

python - 将年份和月份名称转换为 Pandas 数据框的日期时间列

java - 计算两个瞬间之间的天数、小时数和分钟数

linux - Unix 纪元时间戳到人类可读日期时间和反向转换

python - 无法导出到 ".csv"文件 - pandas.DataFrame

sql - oracle regexp_replace 保留数字和反斜杠

c++ - 从shared_ptr <T>派生

c++ - lambda 需要捕获 'this' 来调用静态成员函数?