如何用concat替代append规避FutureWarning?concat报错TypeError原因及解决
问题:用concat替代append操作DataFrame时报错TypeError: unhashable type: 'DataFrame'
原本使用append方法操作DataFrame的代码运行正常:
DF= pd.DataFrame(columns=['Col1', 'Col2', 'Col3']) DF = DF.append({'Col1': "A", 'Col2' : 'B' ,'Col3': 'C'},ignore_index=True)
尝试用concat替代append以避免FutureWarning,编写的代码如下:
DF= pd.DataFrame(columns=['Col1', 'Col2', 'Col3']) DF = pd.concat([DF],pd.DataFrame({'Col1': ['A'],'Col2':['B'],'Col3':['C']}))
运行时抛出错误:
TypeError: unhashable type: 'DataFrame'
错误原因
pd.concat()的第一个参数必须是包含所有要合并对象的可迭代序列(比如列表),你错误地把第二个DataFrame作为独立参数传递给了concat,而不是将它和原DF一起放到列表里。
修正后的代码
把两个要合并的DataFrame都放进列表中,同时加上ignore_index=True参数(和原append行为保持一致,重置索引):
DF= pd.DataFrame(columns=['Col1', 'Col2', 'Col3']) DF = pd.concat([DF, pd.DataFrame({'Col1': ['A'],'Col2':['B'],'Col3':['C']})], ignore_index=True)
补充说明
如果只是添加单行数据,也可以用pd.DataFrame.from_dict简化写法:
DF= pd.DataFrame(columns=['Col1', 'Col2', 'Col3']) DF = pd.concat([DF, pd.DataFrame.from_dict({'Col1': "A", 'Col2': 'B', 'Col3': 'C'}, orient='index').T], ignore_index=True)
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

