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

如何用一行代码实现Pandas多列指定规则拆分并原地修改

一行代码实现Pandas多列指定规则拆分(原地修改)

先还原你的场景:你有这样的DataFrame,原本是逐列手动拆分的:

>>> df
         ID               Started
0       NaN  20.06.2017 13:19:04
1       NaN  10.04.2018 04:48:32
2  WBTS-1509  06.11.2017 10:28:14
3  WBTS-1509  03.03.2018 10:12:29
4  WBTS-1117  07.03.2018 17:04:28

你之前的拆分代码是逐列写的:

df['Started'].apply(lambda x: x.split(':')[0])
df['ID'].apply(lambda x: x.split('-')[1])

现在你已经定义了三个对应规则的列表:

col_names = ['ID' , 'Started']
splitby = ['-' , ':']
index_after_split = [1 , 0]

想要一行代码完成所有列的拆分,还要原地修改(inplace=True),不用循环?安排!

直接用这行代码:

df.update(pd.DataFrame({col: df[col].apply(lambda x: x.split(split)[idx] if pd.notna(x) else x) for col, split, idx in zip(col_names, splitby, index_after_split)}))

为什么这行代码能生效?

  • 用zip(col_names, splitby, index_after_split)把列名、拆分符、目标索引一一对应,避免了显式循环
  • 字典推导式遍历每一组对应关系,对每个列做拆分处理:特意加了if pd.notna(x) else x是为了处理ID列里的NaN值,不然直接调用split会报错
  • 把处理后的结果转成DataFrame,再用df.update()方法原地修改原DataFrame——update会自动匹配列名和索引,只替换对应位置的有效值,完美符合你的需求

执行后的结果

运行完上面的代码后,你的df会变成这样:

>>> df
     ID          Started
0   NaN  20.06.2017 13
1   NaN  10.04.2018 04
2  1509  06.11.2017 10
3  1509  03.03.2018 10
4  1117  07.03.2018 17

内容的提问来源于stack exchange,提问作者Bharat Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:25