Python如何将整数形式字符串存入CSV,读取时不转为numpy.int64
pandas读取CSV时数值字符串被识别为numpy.int64的解决方案
问题原因
CSV属于纯文本格式,本身不会存储字段的类型信息。pandas读取CSV文件时会默认自动推断每列的数据类型,全由数字组成的字符串会被默认判定为整数类型,因此出现读取后类型变为numpy.int64的情况。
解决方案
方案1:读取时指定dtype参数(最推荐)
直接在调用pd.read_csv时指定目标字段的类型为字符串即可,适合明确知道哪几列需要保留字符串格式的场景:
# 仅指定ID列为字符串类型 df = pd.read_csv('test.csv', dtype={'ID': str}) # 如果需要所有列都读取为字符串,可直接全局设置 df = pd.read_csv('test.csv', dtype=str)
修改后运行你的测试代码,print(df['ID'].iloc[0] == ID)会输出True,type(df['ID'].iloc[0])将返回<class 'str'>,符合预期。
方案2:使用converters参数做字段转换
如果需要在读取时对字段做额外的自定义处理,可以用converters参数指定转换规则:
df = pd.read_csv('test.csv', converters={'ID': lambda x: str(x).strip()})
上述代码除了将ID转成字符串外,还会自动去除首尾的空白字符,适合原始数据存在格式问题的场景。
方案3:写入时强制添加字符串标识(可选)
如果希望其他使用该CSV文件的人不需要额外配置也能正确识别字符串类型,可以在写入时给非数值字段添加双引号包裹:
import csv df.to_csv('test.csv', index=False, quoting=csv.QUOTE_NONNUMERIC)
该方式写入的CSV中,ID字段会被保存为"1",大部分数据分析工具读取时会自动识别为字符串类型。
内容的提问来源于stack exchange,提问作者Fadi Younes。
相关产品推荐
相关产品推荐

