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

Pandas不同行数数据写入CSV仅保留最小行数问题求助

问题根源

  • 你当前的代码逻辑是逐列删除整个DataFrame的行:处理第一列时删掉了超出99分位数的对应行,整个DataFrame的行数直接减少,后续处理第二列是在已经缩减后的DataFrame基础上再删行,最终全表行数就是所有列删行后最小的交集行数,自然所有列都会被截断。
  • 你将to_csv放在了for循环内部,每次循环都会覆盖之前写入的CSV文件,最终输出的只是最后一列处理完的结果,完全没有保留之前列的处理结果。
  • ffill/bfill是用来填充已有行中的空值,你已经把多余的行全部删除,自然无法生效。

解决方案

根据你的需求有两种实现方式:

方式1:保留原始全表行数,仅将各列异常值设为空

如果需要保留原始行的对应关系,只是把异常值清空,不删除行,用以下代码:

import pandas as pd

features = ['HYG_FT01', 'HYG_PU12_PW_PV']
df = pd.read_csv('HYG_2021_08.csv', usecols=features, sep=';', encoding='ISO-8859-1')

for col in features:
    q99 = df[col].quantile(q=0.99, numeric_only=True)
    # 仅标记当前列的异常值为空,不删除整行
    df.loc[df[col] > q99, col] = pd.NA
    print(df[col].describe())

# 所有列处理完成后统一写入CSV,空值会自动留空,不会截断任何列的有效值
df.to_csv('trials.csv', index=False)

方式2:各列单独剔除异常值后按最长列对齐,不足的位置补空

如果不需要保留原始行的对应关系,只需要把每列的有效值全部保存,长度不足的列尾部补空,用以下代码:

import pandas as pd

features = ['HYG_FT01', 'HYG_PU12_PW_PV']
df = pd.read_csv('HYG_2021_08.csv', usecols=features, sep=';', encoding='ISO-8859-1')

col_res = {}
for col in features:
    q99 = df[col].quantile(q=0.99, numeric_only=True)
    # 提取当前列所有有效值,重置索引避免自动行对齐
    valid_series = df.loc[df[col] <= q99, col].reset_index(drop=True)
    col_res[col] = valid_series

# 按最长列的长度对齐,短列尾部自动补空
final_df = pd.DataFrame(col_res)
final_df.to_csv('trials.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:00