从Python函数调用`dt.`类型

2024-03-29 12:12:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas中有时间戳,我希望能够编写一个函数,使我能够提取日期的不同部分。这是一个MWE:

import pandas as pd
df = pd.DataFrame({'hit': pd.to_datetime(['2018-12-29 00:00:00', '2019-03-25 00:00:00'])})

这就是我想做的:

def test(timepart):
    df['hit'].dt.timepart

所以我可以调用test(month),函数将返回12, 03


Tags: to函数testimportdataframepandasdfdatetime
2条回答

使用getattr返回特定属性:

def test(df, timepart):
    return getattr(df['hit'].dt, timepart)

test(df, 'month')
0    12
1     3
Name: hit, dtype: int64

strftime的问题是它在返回结果之前将结果转换为字符串


如果你想尝尝dynamic life,试试DataFrame.eval

def test(df, timepart):
    return df.eval(f"hit.dt.{timepart}", engine='python')

test(df, 'month')

0    12
1     3
Name: hit, dtype: int64

python的eval是危险的,谢天谢地,有更安全的替代方法来做同样的事情

您可以使用strftime

def test(timepart):
    return df['hit'].dt.strftime('%'+timepart[0])
print(test('month'))

输出:

0    12
1    03
Name: hit, dtype: object

相关问题 更多 >