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

Python向空pd.DataFrame添加数据触发TypeError,求问题排查

问题解析:DataFrame添加行时出现TypeError的原因及解决办法

你在尝试往DataFrame里添加行数据并导出为CSV时碰到了TypeError: Expected tuple, got str的错误,明明参考了教程写法却跑不通,其实问题出在最开始创建DataFrame的列定义上。

核心错误点

你创建DataFrame时,列名用了嵌套列表的写法:

df = pd.DataFrame(columns=[ ['team'], ['timestamp'], ['tr_jan'], ['tr_dec'], ['tr_diff']])

这种写法会让pandas把列解析成多级索引(MultiIndex)——每个列名实际上是一个单元素的元组(比如('team',)),而不是你预期的普通字符串列名。

当你用df.append()传入字典时,字典的键是字符串(比如'team'),但DataFrame的列是元组类型的多级索引,两者无法匹配。pandas在尝试重新对齐列的时候,就会抛出TypeError: Expected tuple, got str的错误,因为它期望的是元组格式的列标识,而你给的是字符串。

解决办法

1. 修正列定义(最关键的一步)

把嵌套的列表改成普通的字符串列表,直接定义列名:

df = pd.DataFrame(columns=['team', 'timestamp', 'tr_jan', 'tr_dec', 'tr_diff'])

这样列就变成了普通的字符串索引,和你append时字典的键完全对应,就能正常添加行了。

2. 更高效的写法(推荐)

另外要注意,df.append()在pandas 2.0版本之后已经被弃用了,推荐先把所有行数据收集到列表里,再一次性创建DataFrame,这种方式性能更好,尤其数据量大的时候:

# 初始化空列表存储所有行数据
rows_data = []

for tuple_item in datapoints:
    team = tuple_item[0]
    for datapoint in tuple_item[1]:
        timestamp = get_time_stamp(datapoint[0])
        # 将每行数据转为字典加入列表
        rows_data.append({
            'team': team,
            'timestamp': timestamp,
            'tr_jan': 1,
            'tr_dec': 20,
            'tr_diff': 2000
        })

# 一次性生成DataFrame
df = pd.DataFrame(rows_data)

修改完成后,你就可以正常操作DataFrame,最后用df.to_csv('output.csv', index=False)导出成CSV文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:20