如何用Pandas按原格式保存处理后的Excel/CSV数据?
问题:Pandas处理后的数据无法按原格式保存到Excel/CSV
我想用Pandas把处理后的数据按原格式保存到另一个Excel/CSV文件。原Excel文件内容如下:
num1,num2 1, 4 2, 5 3, 6 80, 120
现在遇到两个问题:
- 使用
series1.to_excel('004.xlsx',index=False)时,输出文件仅保留num2列,num1列丢失 - 使用
series1.to_csv('004.csv',mode='a',index=False)时,两列数据会按行依次追加,无法保持原有的并排格式
期望的输出格式:
num1,num2 1, 4 2, 5 3, 6 2.5, 3.75
以下是我的代码:
import numpy as np import pandas as pd df_excel = pd.read_excel('002.xlsx') df = df_excel for col in df.columns: df_current_col = df[col] series1 = pd.Series(df_current_col) s = (series1.quantile(0.75)-series1.quantile(0.25)) iqr = 3 * s val_low = series1.quantile(0.25) - iqr*0.5 val_up = series1.quantile(0.25) + iqr*0.5 outlier = series1[(series1 > val_up)|(series1 < val_low)] normal_val = series1[(series1 < val_up)|(series1 > val_low)] outlier = np.array(outlier) sum = 0 normal_val = np.array(normal_val) for i in range(len(normal_val)): sum+=normal_val[i] mean = sum / (len(normal_val)) if outlier is None: print('NONE') else: for i ,val in enumerate(series1): series1[i] = float(np.where((((val < val_low) | (val > val_up))), mean, val)) ######## #series1.to_excel('004.xlsx',index=False) series1.to_csv('004.csv',mode='a',index=False)
问题根源
你当前的代码是逐列处理后单独保存每一列,导致Excel被覆盖、CSV行追加的问题。正确做法是将处理后的列更新回原DataFrame,最后一次性保存整个DataFrame,才能保留列的并排格式。
修正后的代码
import numpy as np import pandas as pd # 读取原数据 df = pd.read_excel('002.xlsx') # 遍历每一列处理异常值 for col in df.columns: series = df[col] # 计算四分位数和IQR q25 = series.quantile(0.25) q75 = series.quantile(0.75) s = q75 - q25 iqr = 3 * s val_low = q25 - iqr * 0.5 val_up = q25 + iqr * 0.5 # 若需标准IQR上下限,可改为q75 + 1.5*iqr # 筛选正常值并计算均值(修正原逻辑错误:用&而非|) normal_val = series[(series >= val_low) & (series <= val_up)] mean = normal_val.mean() # 替换异常值为均值 df[col] = np.where((series < val_low) | (series > val_up), mean, series) # 一次性保存整个DataFrame df.to_excel('004.xlsx', index=False) # 或保存为CSV # df.to_csv('004.csv', index=False)
关键修正点
- 直接更新原DataFrame列:处理完列后赋值回
df[col],而非单独保存Series - 修正正常值筛选逻辑:原代码用
|会把所有数据判定为正常值,改为&筛选区间内的有效值 - 简化均值计算:用Pandas内置
mean()替代手动循环求和,高效且简洁 - 统一保存整个DataFrame:避免逐列保存导致的格式混乱
内容的提问来源于stack exchange,提问作者a.T tang
相关产品推荐
相关产品推荐

