当我重命名一个列时,如果新的列名已经存在,为什么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