向空Pandas DataFrame追加行无效,求问题原因及解决方法
问题分析与解决
你遇到的问题核心在于pandas的append()方法不会修改原DataFrame——它会返回一个包含新增行的新DataFrame对象,而你没有将这个返回值重新赋值给df,所以原来的空DataFrame根本没被改变。
原代码的问题
看你这段代码:
import pandas as pd months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] l = [1607.8, 1688.17, 1605.66, 1469.03, 1312.65, 1451.74, 1445.26, 1350.94, 1371.27, 1201.6, 1240.59, 1291.43] df = pd.DataFrame(columns = months, dtype=float) df.append([l]) # 这里只生成新DF,没赋值回原变量 print(df)
df.append([l])确实生成了包含目标行的新DataFrame,但你没有把这个结果存回df变量,所以df还是最初创建的空DataFrame,打印出来自然是空的。
正确的兼容写法(旧版pandas)
如果你一定要用append,需要把返回值赋值给df,同时建议加上ignore_index=True避免索引混乱:
df = pd.DataFrame(columns = months, dtype=float) df = df.append([l], ignore_index=True) print(df)
更推荐的写法(pandas 2.0+)
注意:pandas从2.0版本开始已经弃用了append()方法,官方推荐使用pd.concat()或者直接构造DataFrame(就像你后来用的方法)。用concat的示例如下:
df = pd.DataFrame(columns = months, dtype=float) new_row = pd.DataFrame([l], columns=months) df = pd.concat([df, new_row], ignore_index=True) print(df)
而你后来用的df = pd.DataFrame([l], columns = months)之所以有效,是因为你直接创建了包含目标行的新DataFrame并赋值给df,跳过了“先创建空DF再追加”的步骤,这其实是更高效的写法——尤其是当你只需要添加一行的时候,完全没必要先创建空DF。
内容的提问来源于stack exchange,提问作者Subhajit Kundu
相关产品推荐
相关产品推荐

