我有以下数据框:
data.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 658 entries, 2016-01-04 to 2019-01-31
Data columns (total 4 columns):
Equity 658 non-null float64
Equity 658 non-null float64
Equity 658 non-null float64
Equity 658 non-null float64
dtypes: float64(4)
memory usage: 25.7 KB
我尝试重命名列。
old_names = ['Equity', 'Equity', 'Equity', 'Equity' ]
new_names = ['Equity1','Equity2', 'Equity3','Equity4' ]
data.rename(columns=dict(zip(old_names, new_names)), inplace=True)
它返回错误。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-123-9f8bfefe3429> in <module>
1 old_names = ['Equity', 'Equity', 'Equity', 'Equity' ]
2 new_names = ['Equity1','Equity2', 'Equity3','Equity4' ]
----> 3 data.rename(columns=dict(zip(old_names, new_names)), inplace=True)
TypeError: 'dict' object is not callable
可能是什么原因?我会感谢你的帮助。
对于 的论点,字典是完全有效的
columns
对象pandas.DataFrame.rename
。您的错误几乎可以肯定是由于在模块中的这些行之前您已经重新定义了内置类型 (class)dict
。重现您的错误非常容易:使用
dict = a
(odict = {}
) 将dict
对象的引用重新分配给identifierdict
,因此从现在开始,dict
它不是可以实例化以创建新字典的类,它是此类的对象,并且字典是不可调用的 ({"a": 4}()
) .作为一般规则,您永远不应该使用标准库的内置或模块的名称来命名您自己的变量,最多(如果没有更好的名称)使用名称后跟下划线作为约定标记:
也就是说,即使更正上述内容,正如您所做的那样,您将无法重命名列:
zip(old_names, new_names)
产生:当我们使用
dict
上述内容时,我们得到:发生这种情况是因为字典有一个唯一的键,所以只剩下最后一对 ,
('Equity', 'Equity4')
。它最终将生成一个 DataFrame,其中所有列重命名为Equity4
对于您的情况,只需使用属性重新分配新名称
DataFrame.columns
: