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



当我重命名一个列时,如果新的列名已经存在,为什么pandas.DataFrame对象不抱怨?

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

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

的例子:

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'

假设您有一个将旧列映射到新列名的字典。当重命名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

最新更新