Pandas中向新DataFrame添加特定类型数据返回空表问题求助
哈哈,这个问题我太熟悉了!刚用Pandas的时候我也被这个append()的特性坑过好几次😆
问题出在哪?
核心原因是:Pandas的append()方法不会原地修改你的原DataFrame。它的设计是返回一个包含新增数据的全新DataFrame对象,而你现在的代码只是调用了append(),却没有把返回的结果重新赋值给date变量——所以原来的date还是保持创建时的空状态,自然打印出来是空的。
另外还有个小细节:你创建的pd.Series没有指定列名,就算赋值成功,也可能出现列不匹配的问题,最好明确指定和DataFrame一致的列名。
怎么解决?
给你几个可行的方案,按推荐程度排序:
方案1:用官方推荐的pd.concat()(最稳妥)
因为append()在Pandas 2.0及以上版本已经被标记为弃用了,官方更推荐用concat来合并数据:
import pandas as pd # 初始化空DataFrame date = pd.DataFrame(columns=['Date']) # 构造要添加的单行数据(转成DataFrame格式) new_row = pd.DataFrame({'Date': [report2.loc[1, 'Serv']]}) # 合并原DataFrame和新行,重新赋值给date date = pd.concat([date, new_row], ignore_index=True) print(date)
方案2:修正append()的用法(兼容旧版本)
如果你还在使用较低版本的Pandas,一定要记得把append()的返回值重新赋值给原变量,同时给Series指定列名:
import pandas as pd date = pd.DataFrame(columns=['Date']) # 把append的结果重新赋值给date,同时给Series指定name匹配列名 date = date.append(pd.Series(report2.loc[1, 'Serv'], name='Date'), ignore_index=True) print(date)
方案3:直接从列表构造(适合少量数据)
如果只是添加单条数据,这种方式更简单直接:
import pandas as pd # 直接用字典列表初始化DataFrame date = pd.DataFrame([{'Date': report2.loc[1, 'Serv']}]) print(date)
内容的提问来源于stack exchange,提问作者Mac
相关产品推荐
相关产品推荐

