使用Pandas计算CSV新增列失败求助:基于incidentcountlevel1与examcount
修复Pandas脚本并生成新列的解决方案
看起来你的脚本里有几个明显的问题导致运行失败,我来帮你一步步梳理和修复:
先说说你当前脚本的问题
- 重复读取同一个CSV文件到
df、df1、df3,完全没必要,而且df3的文件路径是截断的(/home/corp_sourcing/Metric_Fact_20180324_12...),这会直接触发文件找不到的错误。 - 没有明确写出你要基于
incidentcountlevel1和examcount计算新列的具体逻辑,脚本自然无法完成你的目标。
修复后的完整脚本示例
假设你的需求是生成两个新列(你可以根据实际需求替换计算逻辑):
incident_exam_ratio:incidentcountlevel1与examcount的比率(处理除零避免报错)incident_exam_diff:incidentcountlevel1与examcount的差值
以下是修复后的代码:
import pandas as pd import numpy as np # 只需要读取一次CSV文件即可 df = pd.read_csv(r"/home/corp_sourcing/Metric_Fact_20180324_1227.csv", header='infer', skiprows=[1]) # 先确保两列是数值类型(如果CSV里是字符串格式的数值) df['incidentcountlevel1'] = pd.to_numeric(df['incidentcountlevel1'], errors='coerce') df['examcount'] = pd.to_numeric(df['examcount'], errors='coerce') # 计算第一个新列:比率,处理除零的情况(分母为0时设为NaN或者你想要的默认值) df['incident_exam_ratio'] = np.where(df['examcount'] != 0, df['incidentcountlevel1'] / df['examcount'], np.nan) # 计算第二个新列:差值 df['incident_exam_diff'] = df['incidentcountlevel1'] - df['examcount'] # 查看前几行结果验证 print(df[['incidentcountlevel1', 'examcount', 'incident_exam_ratio', 'incident_exam_diff']].head()) # 保存到新的CSV文件(可选) df.to_csv(r"/home/corp_sourcing/Metric_Fact_With_New_Cols.csv", index=False)
额外注意事项
- 如果你的新列计算逻辑不是上面的例子,只需要替换
df['新列名'] = ...这部分的代码即可。 - 确认
skiprows=[1]的逻辑是否正确:这会跳过CSV的第二行,如果你是想跳过表头之外的无效行,要确保CSV结构匹配。 - 如果运行仍报错,检查这几点:文件路径是否完全正确、列名是否和CSV里的完全一致(大小写、空格都要匹配)、数据里是否有非数值内容导致类型转换失败。
内容的提问来源于stack exchange,提问作者pradeep panda
相关产品推荐
相关产品推荐

