pandas 不会按顺序添加列

pandas wont add columns in order

我有两个数据框

个数:

Unnamed: 0                       Name  Number
42           42                   Aberavon    1742
43           43                  Aberconwy    2769
16           16             Aberdeen North    3253
25           25             Aberdeen South    4122
355         355         Airdrie and Shotts    1194
44           44                  Aldershot    4517 

和选民:

    Unnamed: 0  Unnamed: 0.1                       Name  Number
0           533           533                   Aberavon   49821
1           534           534                  Aberconwy   45525
2           591           591             Aberdeen North   67745
3           592           592             Aberdeen South   68056
4           593           593         Airdrie and Shotts   66792
5             0             0                  Aldershot   72430

当我输入

numbers['No. Voters] = electorate['Number']

对于 print(numbers) 我得到:

 Unnamed: 0                       Name  Number  No.Voters
42           42                   Aberavon    1742      80805
43           43                  Aberconwy    2769      78796
16           16             Aberdeen North    3253      68343
25           25             Aberdeen South    4122      66347
355         355         Airdrie and Shotts    1194      77534

这显然是错误的,我不确定为什么,因为索引应该无关紧要,因为它们是按名称顺序排列的,因为我通过 sort_values 函数

传递了每个索引

谁能告诉我出了什么问题,正确的命令是将数据帧编号中的新列与 electorate 中的数值相匹配吗?

您可以使用 values 将列 Number 转换为 numpy array,因此对齐得到更正:

numbers['No. Voters] = electorate['Number'].values

或两者 DataFramesreset_index 以正确对齐:

numbers.reset_index(drop = True)
electorate.reset_index(drop = True)
numbers['No. Voters] = electorate['Number']

查看数据帧的索引,它们不一样。这就是您在创建新列时遇到问题的原因。

如果您不关心保留 electorate 的索引,您可以在定义 number 的新列之前使用 reset_index:

electorate.reset_index(drop = True)

编辑:请注意,jezrael 的 values 解决方案更安全,因为它不关心两个索引。此外,如果您以后需要它,它允许保留 electorate 的索引。

numbers['No. Voters'] = electorate['Number'].values