python - 如何使用 pandas 的 eval 函数计算两个日期列之间的天数?

标签 python pandas

让我有两个日期列。

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.evalpd.eval 继承它的 kwargs

df.eval("days=abs(ColA-ColB)", engine='python', inplace=True)
df

enter image description here


旧解决方案:

这是一种方法:(在 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)

enter image description here

df.assign(days=
          df.apply(lambda x: abs(eval(repr(x['ColA'].date()-x['ColB'].date()))), axis=1))

enter image description here

关于python - 如何使用 pandas 的 eval 函数计算两个日期列之间的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975923/

相关文章:

python - 如何在没有索引的情况下将数据框转换为 Pandas 中的字典

python - 属性错误 : module 'sklearn.metrics' has no attribute 'calinski_harabaz_score'

python - Visual Studio Code 中调试和运行模式下使用的不同 python 环境

python - JSON pretty-print 在 Python 中不起作用

python - 提高从 Pandas 列中提取信息的速度

python - Pandas 数据框列值之间的比较

Python asyncio任务列表生成而不执行函数

Python 3.4 -> 使用 SQLAlchemy win32 连接到 PostGres SQL

Python:导入双管 csv Pandas

python - 将解析后的 csv 文件自动读取为字符串转换为 pandas 数据框