You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何Pandas DataFrame的append方法不生效?代码排查求助

Pandas DataFrame.append() 不生效的问题解析

嘿,我一眼就揪出问题所在啦!你对Pandas append() 方法的使用方式有误——这个方法不会直接修改原DataFrame,而是返回一个包含追加数据的全新DataFrame。你现在只是调用了result_df.append(data),但没把返回的新对象重新赋值给result_df,所以最初创建的空DataFrame自始至终都没被更新,最后输出自然是空的。

错误原因拆解

在你的循环代码里:

result_df.append(data)

这行代码确实生成了一个包含result_df原有数据+data的新DataFrame,但你没有把这个新对象存回result_df变量中,导致result_df始终是最开始创建的空DataFrame。

修正方案1:正确使用append()

只需要把append返回的新DataFrame重新赋值给result_df即可,同时建议加上ignore_index=True避免索引重复:

import glob
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

f_name = glob.glob('*.json')
result_df = pd.DataFrame()
filepath = 'proba.parquet'

for f in f_name:
    with open(f, encoding='utf-8', mode='r') as i:
        data = pd.read_json(i, lines=True)
        # 关键:将append返回的新DataFrame赋值回result_df
        result_df = result_df.append(data, ignore_index=True)

print(result_df)
table_from_pandas = pa.Table.from_pandas(result_df)
pq.write_table(table_from_pandas, filepath)

更优方案:使用pd.concat()替代append()

需要注意的是,Pandas从1.4.0版本开始已经弃用了append()方法,官方推荐用pd.concat()替代。这种方式不仅符合官方规范,还能避免循环中反复创建新DataFrame的性能损耗,尤其适合处理大量文件的场景:

import glob
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

f_name = glob.glob('*.json')
df_list = []  # 先将所有读取的DataFrame存入列表
filepath = 'proba.parquet'

for f in f_name:
    with open(f, encoding='utf-8', mode='r') as i:
        data = pd.read_json(i, lines=True)
        df_list.append(data)

# 一次性合并所有DataFrame
result_df = pd.concat(df_list, ignore_index=True)

print(result_df)
table_from_pandas = pa.Table.from_pandas(result_df)
pq.write_table(table_from_pandas, filepath)

内容的提问来源于stack exchange,提问作者Djikii

火山引擎 最新活动