Python中Pandas将DataFrame存为CSV时全NaN列丢失如何解决
解决方案
你可以直接在调用to_csv方法时显式指定需要保留的列列表,同时配置na_rep参数将NaN值转换为空字符串输出,即可强制保留所有全NaN列,列顺序也会严格按照你指定的规则生成:
import numpy as np import pandas as pd # 原有生成逻辑不变 df = dataset.reindex(columns=['B2', 'C1', 'T3A', 'C2', 'B3A']) # 导出时指定列和空值表示 df.to_csv( 'df.csv', columns=df.columns.tolist(), # 直接沿用df现有的列顺序,无需手动输入 na_rep='', # 将所有NaN输出为空字符串 index=True # 如果不需要保留原索引可以设为False )
如果上述方法还是不生效,可以提前对全NaN列做填充处理再导出:
# 仅对全为NaN的列填充空字符串,不影响其他列的原值 for col in df.columns: if df[col].isna().all(): df[col] = '' df.to_csv('df.csv', na_rep='')
之前方法失效的原因
你之前调用replace(np.nan, '', regex=True)时额外加了regex=True参数,该参数开启后pandas会将匹配规则当做正则表达式处理,无法正确匹配NaN值,去掉该参数即可正常替换空值。
注:默认版本的pandas
to_csv方法本身不会主动删除全NaN列,如果你导出后列消失,可以先用纯文本编辑器打开CSV文件确认,排除后续读取CSV时配置参数错误导致的漏读问题。
内容的提问来源于stack exchange,提问作者Newbielp
相关产品推荐
相关产品推荐

