You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas方法链中通过.assign()调用pd.to_datetime()?

解决Pandas方法链中整合pd.to_datetime()的问题

你的问题出在第二个assign里的lambda表达式——你引用的是原始数据框tcap的date_time列,而不是经过前一步处理后生成的新列。把tcap['date_time']换成df['date_time']就能解决这个问题,因为lambda里的df代表的是前一步方法链返回的中间数据框。

修正后的方法链代码

tcap2 = tcap.\
        assign(person = tcap['text'].apply(lambda x: x.split(" ", 1)[0]),
               date_time = tcap['text'].str.extract(r'\(([^()]+)\)'),
               text = tcap['text'].str.split(': ').str[1]).\
        assign(date_time = lambda df: pd.to_datetime(df['date_time']))

更简洁的写法:在同一个assign里直接转换

你也可以不用拆分两次assign,在第一次生成date_time列的时候就直接转换为datetime类型,代码更紧凑:

tcap2 = tcap.\
        assign(person = tcap['text'].apply(lambda x: x.split(" ", 1)[0]),
               date_time = lambda df: pd.to_datetime(df['text'].str.extract(r'\(([^()]+)\)')),
               text = tcap['text'].str.split(': ').str[1])

这里用lambda引用当前的中间数据框df,提取日期字符串后直接用pd.to_datetime转换,一步到位。

额外优化:替换apply为str.split

你提取person列用了apply,其实可以用Pandas的字符串方法更高效地实现:

tcap2 = tcap.\
        assign(person = tcap['text'].str.split(" ", n=1).str[0],
               date_time = lambda df: pd.to_datetime(df['text'].str.extract(r'\(([^()]+)\)')),
               text = tcap['text'].str.split(': ', n=1).str[1])

用str.split(n=1)指定只拆分一次,比apply里的lambda更符合Pandas的向量化操作习惯,性能也更好。

内容的提问来源于stack exchange,提问作者Robert Chestnutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:46:03