【问题标题】:Type error after renaming Pandas Dataframe columns重命名 Pandas Dataframe 列后输入错误
【发布时间】:2013-08-17 02:07:33
【问题描述】:

问题描述:我有两个数据框(“Train”和“Test”),列几乎相同(“Test”有两个变量未出现在 Train 中,Train 有一个变量未出现在 Test 中; 然而,为了产生“测试”,我需要在 R 中做一些处理,因为我不知道如何在 Pandas 中做相当于 PLYR 的完全连接。最终结果是所有空格和撇号都被替换为句点在测试中的 R 数据框名称中。

我当前的问题是我需要在两个数据帧中具有相同的变量名(减去测试中的额外变量名)。我目前的尝试如下:

Test.columns[2:]=Train.columns[1:]
After index points 2 and 1, columns are the same

这似乎在名义上有效;当我进入

Test.columns

我得到了预期的输出。但是,问题会在后面出现。如果满足条件,我正在尝试删除 Train 中的一列,以及 Test 中的同一列。

for i in Train.columns[1:]:
     if condition:
        del Train[i]
        del Test[i]

哪个产生

TypeError: 'NoneType' object is not iterable

如果我只是输入,我会得到同样的错误

Test

但是如果我输入类似的东西会得到预期的输出

Test['varname']

我想我希望有人能立即认出我在列名重新分配中犯下的任何严重罪行,这会产生类型错误(如果我只是从 Train 中删除,我没有问题),或者提出另一种更改方式列名。

非常感谢任何帮助。

【问题讨论】:

  • 我想也许罪孽正在改变你正在迭代的东西,同时迭代它,总是一个危险的游戏。但是我无法在 0.12 中重现这一点(您使用的是哪个版本的熊猫?)。
  • 您能否发布一个示例来演示此问题,即使用一些虚拟数据?大概只有一行(但有你的列)的 DataFrames 足以显示这种行为? (它可能通过升级修复,但我不确定。)

标签: pandas rename typeerror


【解决方案1】:

我建议将rename 与函数一起使用,例如用.替换撇号和空格:

In [11]: df = pd.DataFrame([[1, 2], [3, 4]], columns=["don't", "no way"])

In [12]: df.rename(columns=lambda x: x.replace("'", '.').replace(' ', '.'))
Out[12]: 
   don.t  no.way
0      1       2
1      3       4

最好不要在这里使用 R...
也许值得问另一个关于如何进行 PLYR 样式完全连接的问题? :)

【讨论】:

  • 是完全连接,不同于外连接(df1.join(df2, how='outer') ?
  • 他们似乎是。谢谢您的建议;它有效地解决了我的问题。
猜你喜欢
  • 2019-07-21
  • 2021-04-24
  • 2019-12-01
  • 2020-09-03
  • 2017-03-05
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多