让我有两个日期列。
df = ColA ColB
31-1-17 01-2-17
exp = 'days = ColA - ColB'
df.eval(exp,inplace=True)
预期输出:
ColA ColB days
31-1-17 01-2-17 1 days
我可以这样计算
df['days'] = df['ColA'] - df[ColB]
但我想使用与上述不同的“eval 函数”进行计算。
最佳答案
新解决方案:(引用数据部分进行设置)
提供 engine='python'
,因为它当前设置在 engine='numexpr'
。这是因为 df.eval
从 pd.eval
继承它的 kwargs
df.eval("days=abs(ColA-ColB)", engine='python', inplace=True)
df
旧解决方案:
这是一种方法:(在 v'0.19.2'
中测试)
1) 首先确保两列都是 datetime64[ns]
类型。如果没有,请单独使用 pd.to_datetime
或在 apply
的帮助下对它们进行类型转换。在这里,我在阅读自身时将它们解析为 dates
以避免执行此步骤。
2) 使用内置函数 repr()
,将它们转换为日期时间对象的官方表示形式,之后可以被 eval()
函数理解.
(如 repr(datetime.date.today())
给出 'datetime.date(2017, 2, 1)'
)
3) 通过访问它们的 .date
属性减去它们,并取其模数,稍后以天为单位输出。
数据:
txt = StringIO(
"""
ColA ColB
31-1-17 01-2-17
""")
df = pd.read_csv(txt, delim_whitespace=True, parse_dates=['ColA', 'ColB'], dayfirst=True)
df.assign(days=
df.apply(lambda x: abs(eval(repr(x['ColA'].date()-x['ColB'].date()))), axis=1))
关于python - 如何使用 pandas 的 eval 函数计算两个日期列之间的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975923/