Pandas 重命名数据帧列后出现类型错误

Pandas 重命名数据帧列后出现类型错误,pandas,rename,typeerror,Pandas,Rename,Typeerror,问题描述:我有两个数据帧('Train'和'Test'),列几乎相同('Test'有两个变量没有出现在Train中,Train有一个变量没有出现在Test中;但是,要生成“Test”,我需要在R中进行一些处理,因为我不知道如何在Pandas中实现PLYR的完全连接。最终结果是,在测试中,R数据帧名称中的所有空格和撇号都被句点替换 我目前的问题是,我需要在两个数据帧中使用相同的变量名(减去测试中的额外变量名)。我目前的尝试如下: Test.columns[2:]=Train.columns[1:]

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

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

Test.columns[2:]=Train.columns[1:]
After index points 2 and 1, columns are the same
这似乎在名义上起作用;当我进去的时候

Test.columns
我得到了预期的输出。但是,问题会在以后出现。如果满足条件,我将尝试删除序列中的一列,并删除测试中的同一列

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

TypeError: 'NoneType' object is not iterable
如果我只是输入,我会得到同样的错误

Test
但是如果我输入以下内容,就可以得到预期的输出

Test['varname']
我想我希望有人能立即意识到我在重新分配列名时犯下的任何严重错误,这会产生类型错误(如果我只是从火车上删除,我没有问题),或者建议一种替代方法来更改列名

非常感谢您的帮助。

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

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风格的完全连接?:)

我想也许罪恶改变了你在重复的同时重复的东西,总是一个危险的游戏。但是,我无法在0.12中重现这一点(您使用的是哪个版本的pandas?)。您能否发布一个示例来说明这个问题,即使用一些虚拟数据?假设一个具有一行(但包含列)的数据帧足以显示这种行为?(可能通过升级来修复,但我不确定。)完全联接与外部联接是否不同
(df1.join(df2,how='outer')
?它们似乎是。感谢您的建议;它有效地解决了我的问题。