如何处理pandas中的Typeerror,说'是一个无效的键'"

问题描述 投票:0回答:1

我有一个数据框'tsli'在pandas和我想分配ID到每一行。

df = pd.DataFrame()
for i, ts in enumerate(tsli.iterrows()):
    data = [[x, i] for x in tsli[ts]]
    df = df.append(data, ignore_index=True)
df.columns = ['value', 'id']

但我得到的Typeerror是:

TypeError: 
'(0, 0       0.094578 

1       0.663170 

2       0.098690 

3   0.479210 

4       0.645950

...    

9995    0.146930 

9996    0.514230 

9997    0.323500 

9998    0.141310 

9999    0.078390 

Name: 0, Length: 10000, dtype:
float64)' is an invalid key

我不知道为什么会发生这种情况

任何资源或参考资料都将是有益的

谢谢你编辑1.我的tsli是这样的

我的tsli看起来是这样的(这是一个示例数据集,但会产生同样的错误,实际数据集相当大,不能在这里上传)。

2 4 6 7 9 0 65 23
4 67 78 34 58 24 64
78 80 64 64 12 
75 12 43 78 67 34
13 35 75 23 68 23 32
56 32 67 32 78 24 87

而我想要的输出是:

value id

2     0
4     0 
6     0
7     0
9     0
0     0 
65    0
23    0
4     1
67    1
78    1
34    1
58    1
24    1
64    1
78    2
80    2
64    2
64    2
12    2

...以此类推

python python-3.x pandas typeerror enumerate
1个回答
0
投票

更新。

这应该能达到你想要的效果。

    df = pd.DataFrame()
    values = []
    ids = []
    for row in tsli.index:
        for col in tsli.columns:
            ids.append(row)
            values.append(tsli.loc[row, col])
    df.loc[:, 'value'] = values
    df.loc[:, 'id'] = ids

也就是说,我不太确定你为什么要这么做。 本质上,你是将数据框架减少到两列,并保留原始行索引作为值ID。 是什么用例阻止你原封不动地使用原来的tsli数据框呢?

原文回答

你试图给每一行添加什么样的id?

你的代码是失败的,因为它看起来是在尝试使用整列的浮点数(看起来像是 ts)作为键,而你的意思是使用列名。

你可以非常简单地添加你的 "id "列,像这样。

df.loc[:, 'id'] = [y for x in tsli.loc[:, 'values']

{fnTahomafs10bord0shad01cH00FFFF}Where y 可以是任何你想要的。替换 values 用任何你想遍历的列名。

© www.soinside.com 2019 - 2024. All rights reserved.