我在 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。
请您参考如下方法:
使用 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 很危险,谢天谢地有更安全的替代方法来做同样的事情。
