使用Pandas批量读取CSV文件后切片报TypeError错误如何解决
问题排查及解决方法
错误根源
你当前代码的核心问题有两点:
all_files = pd.read_csv('ca.csv'), pd.read_csv("ny.csv"), pd.read_csv("tn.csv"), pd.read_csv('az.csv'), pd.read_csv("tx.csv")这行代码没有用方括号包裹返回值,Python会默认把多个逗号分隔的值组装为元组,此时all_files是存储了5个独立DataFrame对象的元组,不是合并后的表格。元组只支持单个整数/切片作为索引,你传入的[1:, 1]会被识别为元组类型的索引,直接触发类型错误。- 就算
all_files是合并后的DataFrame,直接用df[行, 列]的语法也是不符合Pandas规范的,Pandas原生[]操作符不能同时传入行和列的索引,必须通过iloc(按位置索引)或者loc(按标签索引)属性实现二维切片。
正确实现方案
根据你的需求,可选择以下两种实现方式:
方案1:合并所有CSV后提取指定列
如果需要把5个CSV的行数据合并为同一个表格,再提取列:
import pandas as pd # 读取所有CSV存入列表 all_dfs = [pd.read_csv('ca.csv'), pd.read_csv("ny.csv"), pd.read_csv("tn.csv"), pd.read_csv('az.csv'), pd.read_csv("tx.csv")] # 按行合并所有表格,重置行索引避免冲突 merged_df = pd.concat(all_dfs, ignore_index=True) # 取所有行的第2列(索引从0开始计数,1对应第二列) date_index = merged_df.iloc[:, 1]
方案2:从每个CSV单独提取指定列
如果需要保留每个文件的数据独立性,分别提取列:
import pandas as pd all_dfs = (pd.read_csv('ca.csv'), pd.read_csv("ny.csv"), pd.read_csv("tn.csv"), pd.read_csv('az.csv'), pd.read_csv("tx.csv")) # 提取每个文件的第2列,存入列表,顺序和读取CSV的顺序一致 date_index_list = [df.iloc[:, 1] for df in all_dfs] # 如果只需取第二个文件(ny.csv)的第2列,写法如下 ny_date_index = all_dfs[1].iloc[:, 1]
内容的提问来源于stack exchange,提问作者Renaissance Man
相关产品推荐
相关产品推荐

