当pandas列重命名创建列名重复时,该怎么办

时间:2015-05-29 04:43:02

标签: python pandas

如果新列名已经存在,当重命名列时,为什么pandas.DataFrame对象没有抱怨?

这使得将来引用新列返回pandas.DataFrame而不是pandas.Series,这会导致进一步的错误。

其次,是否有建议的方法来处理这种情况?

示例:

import pandas

df = pd.DataFrame( {'A' : ['foo','bar'] ,'B'  : ['bar','foo'] } )
df.B.map( {'bar':'foo','foo':'bar'} )
# 0    foo
# 1    bar
# Name: B, dtype: object

df.rename(columns={'A':'B'},inplace=True)

现在,以下内容将失败:

df.B.map( {'bar':'foo','foo':'bar'} )
#AttributeError: 'DataFrame' object has no attribute 'map'

1 个答案:

答案 0 :(得分:2)

我们假设您有一个将旧列映射到新列名称的字典。重命名DataFrame时,您可以使用字典理解来测试新值v是否已存在于DataFrame中:

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
d = {'a': 'B', 'b': 'B'}
df.rename(columns={k: v for k, v in d.iteritems() if v not in df}, inplace=True)
>>> df
    a   B
0   1   3
1   2   4

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
d = {'a': 'b'}
df.rename(columns={k: v for k, v in d.iteritems() if v not in df}, inplace=True)
>>> df
    a   b
0   1   3
1   2   4