Pandas技术实现:按*拆分字符串列并更新列替换NaN
解决Pandas中按
*拆分字符串列并更新相邻NaN列的问题 直接上能实现需求的完整代码,之后再拆解每一步的逻辑:
import pandas as pd import numpy as np # 构建原始数据 df = pd.DataFrame.from_dict({ '0': {'158': 'QRE', '159': 'AAA*XCN', '160': 'JJJJ'}, '1': {'158': 'ABC', '159': np.nan, '160': np.nan}, '2': {'158': 931, '159': 88, '160': 0}, }) # 核心处理流程 # 1. 对列'0'按*拆分,生成两列新数据 split_result = df['0'].str.split('*', expand=True) # 2. 将拆分后的左侧内容替换回原列'0' df['0'] = split_result[0] # 3. 仅用拆分后的右侧内容填充列'1'中的NaN值,保留原有非NaN数据 df['1'] = df['1'].fillna(split_result[1]) print(df)
运行后得到的结果完全符合预期:
0 1 2 158 QRE ABC 931 159 AAA XCN 88 160 JJJJ NaN 0
步骤细节解释
- 拆分字符串列:
str.split('*', expand=True)会把列'0'里带*的内容拆成左右两部分,没有*的行,拆分后的第二列会自动填充NaN,完美适配不同格式的行数据。 - 更新原列内容:把拆分后的左侧部分重新赋值给列'0',直接替换掉原来带
*的字符串。 - 精准填充NaN:使用
fillna()方法只针对列'1'中原有的NaN值进行填充,不会改动已经有值的行(比如行158的'ABC'会被完整保留),拆分后没有右侧内容的行也会保持NaN状态。
这个逻辑能适配更复杂的数据集,只要是需要按指定分隔符拆分列、并仅更新目标列NaN值的场景都能直接复用。
内容的提问来源于stack exchange,提问作者Hatshepsut
相关产品推荐
相关产品推荐

