Pandas使用to_csv导出csv文件后读取出现NaN值及内容错位问题
问题原因
错位及出现多余NaN的核心原因是Description列的内容本身包含逗号,CSV默认以逗号作为字段分隔符,pandas读取时会将带逗号的单字段误拆分为多个字段,最终导致列错位。你直接用办公软件打开CSV正常,是因为这类软件对带引号包裹的文本容错性更高,会自动识别内容中的逗号不属于分隔符。
解决方案
方案1:更换无冲突分隔符(最稳妥)
导出和读取时统一指定制表符作为分隔符,完全规避和内容中逗号的冲突:
import pandas as pd # 导出 expenses.to_csv( path_or_buf='expenses.csv', index=False, header=["Description", "Debit"], encoding='utf-8', sep='\t' ) # 读取,分隔符和导出保持一致 expenses = pd.read_csv( "expenses.csv", thousands=",", header=0, sep='\t' )
方案2:保留逗号分隔,强制包裹文本字段
如果必须使用逗号作为分隔符,导出时开启全字段引用,用双引号包裹所有字段避免内容逗号被误判:
import pandas as pd import csv # 导出 expenses.to_csv( path_or_buf='expenses.csv', index=False, header=["Description", "Debit"], encoding='utf-8', quoting=csv.QUOTE_ALL ) # 读取无需额外修改参数,pandas默认会识别引号包裹的字段 expenses = pd.read_csv("expenses.csv", thousands=",", header= 0)
排查补充
如果修改后仍有异常,可以在读取时增加on_bad_lines='warn'参数,定位到具体导致错位的行后针对性处理特殊字符。
内容的提问来源于stack exchange,提问作者senarijit1618
相关产品推荐
相关产品推荐

