You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用pandas筛选DataFrame指定列报TypeError错误如何解决?

核心报错原因

你代码中通过列表推导式生成的df是存储了多个DataFrame的Python列表,并非单个合并后的DataFrame对象,列表只能用整数/切片索引,不能直接传入列名/列索引列表做筛选,报错和列值为浮点型没有关联。

实现代码

分两种常用场景,按需选择即可:

场景1:所有CSV合并为单个文件导出

import os, glob
import pandas as pd

# 基础配置
work_dir = r'C:\Documents\test'
# 两种列筛选方式二选一
# 方式A:按列名筛选
col_to_keep = ['Name', 'ID', 'Area', 'Length']
# 方式B:按列索引筛选(索引从0开始计数)
# col_to_keep = [3,5,7,9]

combined_df = pd.DataFrame()
# 遍历所有csv文件
for csv_file in glob.glob(os.path.join(work_dir, '*.csv')):
    # 读取时直接筛选需要的列,降低内存占用
    temp = pd.read_csv(
        csv_file,
        delimiter=';',
        error_bad_lines=False,
        usecols=col_to_keep
    )
    # 合并到总表
    combined_df = pd.concat([combined_df, temp], ignore_index=True)

# 导出合并后的结果到Excel
combined_df.to_excel(os.path.join(work_dir, '合并结果.xlsx'), index=False)

场景2:每个CSV单独处理、单独导出

import os, glob
import pandas as pd

# 基础配置
work_dir = r'C:\Documents\test'
# 两种列筛选方式二选一
col_to_keep = ['Name', 'ID', 'Area', 'Length']
# col_to_keep = [3,5,7,9]

for csv_file in glob.glob(os.path.join(work_dir, '*.csv')):
    temp = pd.read_csv(
        csv_file,
        delimiter=';',
        error_bad_lines=False,
        usecols=col_to_keep
    )
    # 生成对应Excel文件名
    file_name = os.path.splitext(os.path.basename(csv_file))[0] + '.xlsx'
    temp.to_excel(os.path.join(work_dir, file_name), index=False)
注意事项
  • 优先使用pd.read_csv的usecols参数直接筛选列,无需读取全部28列后再做裁剪,内存效率更高
  • 如果你需要先读取全量列再筛选,语法为单个DataFrame对象[col_to_keep],确保操作对象是DataFrame而非列表
  • 使用列索引筛选时,注意索引从0开始计数,不要超过csv实际的列数范围

内容的提问来源于stack exchange,提问作者rcheeks23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:06:03