Python中如何基于字符串拆分列、清洗数据并进行计算?
Pandas 列拆分计算解决方案
你提供的原始数据截图如下:
完整实现代码
import pandas as pd # 提取A、B列,自动匹配原始列中的A、B数值(兼容整数、小数,支持等号前后有空格的情况) df[['A', 'B']] = df['Given Data'].str.extract(r'A\s*=\s*(\d+\.?\d*).*B\s*=\s*(\d+\.?\d*)').astype(float) # 按公式计算C列 df['C'] = df['A'] / df['B'] # 删除原始的Given Data列 df.drop(columns=['Given Data'], inplace=True)
补充说明
- 如果你的原始
Given Data列是数值-数值的分隔格式,只需将str.extract中的正则替换为r'(\d+\.?\d*)-(\d+\.?\d*)'即可适配 - 遇到A/B为非数字的场景,可在
astype(float)中添加errors='coerce'参数,自动将非法值转为NaN避免程序报错 - 如需处理除数为0的异常,可将C列计算逻辑替换为
df['C'] = df['A'].div(df['B'], fill_value=0),自定义异常场景的填充值
可运行测试示例
你可以直接运行下方代码验证效果:
import pandas as pd # 模拟测试数据 test_df = pd.DataFrame({ "Given Data": [ "测试内容 A=10 B=2 其他内容", "测试内容 A=15 B=3 其他内容", "测试内容 A=7.5 B=2.5 其他内容" ] }) # 执行处理逻辑 test_df[['A', 'B']] = test_df['Given Data'].str.extract(r'A\s*=\s*(\d+\.?\d*).*B\s*=\s*(\d+\.?\d*)').astype(float) test_df['C'] = test_df['A'] / test_df['B'] test_df.drop(columns=['Given Data'], inplace=True) # 输出结果 print(test_df)
运行输出结果:
A B C 0 10.0 2.0 5.0 1 15.0 3.0 5.0 2 7.5 2.5 3.0
内容的提问来源于stack exchange,提问作者J. Roybomb
相关产品推荐
相关产品推荐

