如何在Pandas中写入含NaN值的CSV?解决列数不匹配断言错误
解决Pandas写入CSV时的NaN填充与列数不匹配问题
嗨,我来帮你搞定这个问题!你遇到的列数不匹配错误和NaN/None填充需求,其实用Pandas自带的方法就能轻松解决,不用到处找文档啦~
第一步:先搞定列数不匹配的核心问题
你碰到的AssertionError: 12 columns passed, passed data had 6 columns,本质是数据的列数和你要写入的目标列数不一致。解决这个的关键是让数据强制对齐到目标列:
- 如果你已经明确知道所有12个目标列的名称,先把你的DataFrame重新索引到这些列上,缺失的列会自动填充NaN:
# 假设你的12个目标列存在target_columns列表中 target_columns = ['col1', 'col2', ..., 'col12'] df = df.reindex(columns=target_columns) - 如果你的原始数据是字典列表(比如每行数据可能缺列),直接在创建DataFrame时指定目标列,就能一步到位填充NaN:
data = [{'col1': 1, 'col2': 2}, {'col7': 7, 'col8': 8}] # 示例数据,仅包含部分列 df = pd.DataFrame(data, columns=target_columns)
第二步:让NaN/None正确写入CSV
Pandas默认会把NaN写成空字符串,如果你想明确显示NaN或者None,可以在to_csv时用na_rep参数指定:
# 写入时将NaN替换成"NaN" df.to_csv('output.csv', na_rep='NaN', index=False) # 或者替换成"None" df.to_csv('output.csv', na_rep='None', index=False)
这样缺失数据的位置就会被你指定的内容填充,CSV里就能清晰看到哪些位置是缺失值了。
额外说明
其实Pandas本身完全支持写入NaN,只是默认表现为空字符串,加上na_rep就能自定义缺失值的显示内容。而列数不匹配的问题,只要确保数据的列和目标列对齐,就能彻底避免那个断言错误啦。
内容的提问来源于stack exchange,提问作者iNoob
相关产品推荐
相关产品推荐

