pd.read_csv指定dtype=str后执行join报TypeError如何解决
报错根因分析
该TypeError: sequence item 0: expected str instance, float found报错的核心原因是执行''.join拼接操作时,待拼接的序列中存在float类型的NaN值,并非所有元素都是字符串。
你虽然在read_csv时指定了dtype=str,但pandas默认会自动识别文件中的空值、空白位置为缺失值NaN(float类型),该规则优先级高于dtype指定,所以最终数据中仍然混有float类型的值。
解决步骤
- 读取文件时关闭缺失值检测,避免自动生成
NaN,修改read_csv参数,增加na_filter=False;同时如果文件中存在多个连续空格作为分隔符,将sep=' '改为sep='\s+'避免生成空列。 - reshape生成新DataFrame后,主动做一次类型强转,确保所有元素都是字符串后再执行拼接操作,完整代码如下:
import pandas as pd set1Load = pd.read_csv("Sys 1 Settings.csv", sep='\s+', header=None, dtype=str, na_filter=False) x,y = set1Load.shape set1Formatted = pd.DataFrame(set1Load.values.reshape(x*y//2, 2)[:, ::-1])\ .astype(str)\ .apply(''.join, axis=1) print(set1Formatted)
验证方法
如果要确认是否是缺失值导致的问题,可以在读取文件后执行以下代码查看是否存在空值:
print(set1Load.isna().sum())
如果输出结果中存在大于0的数值,就说明原始读取结果中存在NaN值。
内容的提问来源于stack exchange,提问作者parzival
相关产品推荐
相关产品推荐

