【问题标题】:Apply to_datetime with parameters in pandas使用 pandas 中的参数应用 to_datetime
【发布时间】:2021-09-17 17:16:06
【问题描述】:

我想选择列并使用参数应用 to_datetime。我有一个使用 lambda 的工作方法,但想了解原因。

设置

d = {'date': ['5/2/2000'], 'date2': ['3/02/2000'], 'date3': ['1-2-2000']}
df = pd.DataFrame(data=d)
print(df.dtypes)

这有效并提供了所需的输出。

df[['date', 'date2', 'date3']] = df[['date', 'date2', 'date3']].apply(lambda x: pd.to_datetime(x, dayfirst=True))

output
    date        date2       date3
0   2000-02-05  2000-02-03  2000-02-01

这可行,但不带参数,因此不适用于英国日期。

df[['date', 'date2', 'date3']] = df[['date', 'date2', 'date3']].apply(pd.to_datetime)

output (incorrect)
    date        date2       date3
0   2000-05-02  2000-03-02  2000-01-02

这不起作用,但为什么?

df[['date', 'date2', 'date3']] = df[['date', 'date2', 'date3']].apply(pd.to_datetime(dayfirst=True))

error

TypeError: to_datetime() missing 1 required positional argument: 'arg'

为什么我不能用参数应用 to_datetime? apply 总是这样吗?

【问题讨论】:

    标签: python pandas dataframe apply


    【解决方案1】:

    dayfirst=True作为参数放到.apply中(看**kwargs参数):

    df[["date", "date2", "date3"]] = df[["date", "date2", "date3"]].apply(
        pd.to_datetime, dayfirst=True
    )
    
    print(df)
    

    打印:

            date      date2      date3
    0 2000-02-05 2000-02-03 2000-02-01
    

    【讨论】:

    • 是的,我现在看到了。正如您所说,**kwargs 允许将其他关键字参数作为关键字参数传递给 func。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2016-08-19
    • 2018-11-30
    • 2020-12-11
    • 1970-01-01
    • 2021-04-15
    • 2017-02-01
    相关资源
    最近更新 更多