如果新列名已经存在,当重命名列时,为什么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'
答案 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