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

列表中多DataFrame指定列类型转换失败原因及解决方案

问题分析与解决方案

错误原因分析

你的代码存在多处逻辑和语法错误,导致无法运行:

  • 索引变量混乱:第一个for i in range(len(list_of_names))结束后,i的值是10(列表共11个元素,索引范围0-10)。后续while len(dataframes_list[i]) < 11里的i仍为10,逻辑完全不合理——你需要遍历列表中所有DataFrame,而非仅判断第11个DataFrame的行数。
  • 遍历逻辑错误:for i in dataframes_list[i]会将dataframes_list[10](最后一个DataFrame)的列名赋值给i,之后dataframes_list[i]试图用列名字符串作为列表索引,直接触发TypeError(列表仅支持整数索引)。
  • 路径转义问题:读取CSV时的"\.csv"属于多余转义,应直接写".csv",虽部分系统可兼容,但易引发路径解析错误。

可行解决方案

完全可以用for循环实现需求,以下是两种正确写法:

方法1:遍历列表修改列类型(推荐)

import pandas as pd

list_of_names = ['BR_youtube_trending_data', 'CA_youtube_trending_data', 'DE_youtube_trending_data', 'FR_youtube_trending_data', 'GB_youtube_trending_data',
                 'IN_youtube_trending_data', 'JP_youtube_trending_data', 'KR_youtube_trending_data', 'MX_youtube_trending_data', 'RU_youtube_trending_data',
                 'US_youtube_trending_data']

dataframes_list = []

# 批量读取CSV文件到列表
for name in list_of_names:
    temp_df = pd.read_csv(f"./datasets/{name}.csv")
    dataframes_list.append(temp_df)

# 遍历列表修改指定列的数据类型
for idx in range(len(dataframes_list)):
    dataframes_list[idx] = dataframes_list[idx].astype({"comments_disabled": str, "ratings_disabled": str})

# 更简洁的遍历方式(使用inplace=True直接修改原对象)
# for df in dataframes_list:
#     df.astype({"comments_disabled": str, "ratings_disabled": str}, inplace=True)

方法2:读取CSV时直接指定列类型(更高效)

若无需保留原始数据类型,可在读取阶段就指定列类型,省去后续修改步骤:

import pandas as pd

list_of_names = ['BR_youtube_trending_data', 'CA_youtube_trending_data', 'DE_youtube_trending_data', 'FR_youtube_trending_data', 'GB_youtube_trending_data',
                 'IN_youtube_trending_data', 'JP_youtube_trending_data', 'KR_youtube_trending_data', 'MX_youtube_trending_data', 'RU_youtube_trending_data',
                 'US_youtube_trending_data']

dataframes_list = []
# 定义需要指定类型的列
dtype_spec = {"comments_disabled": str, "ratings_disabled": str}

for name in list_of_names:
    temp_df = pd.read_csv(f"./datasets/{name}.csv", dtype=dtype_spec)
    dataframes_list.append(temp_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:43:13