You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效获取目录下各Pickle文件的数据行数?

解决方案

1. 仅读取每个Pickle文件的行数(无需合并)

不用加载并合并所有数据,逐个读取文件后直接获取行数即可,大幅降低内存占用和耗时:

import pandas as pd
import glob, os

# 注意用原始字符串避免路径转义问题
files = glob.glob(r'O:\Stack\Over\Flow\*.pkl')
file_row_stats = []

for fp in files:
    # 读取单个文件后只保留行数信息
    single_df = pd.read_pickle(fp, compression='xz')
    file_row_stats.append({
        'filename': os.path.basename(fp),
        'row_count': len(single_df)  # 等价于 single_df.shape[0]
    })

# 转成DataFrame方便查看统计结果
stats_df = pd.DataFrame(file_row_stats)
print(stats_df)

2. 合并后统计每个源文件的行数

你的思路完全正确,通过添加文件名列标记数据来源后,用分组统计就能得到每个文件的行数:

优化后的合并代码

import pandas as pd
import glob, os

files = glob.glob(r'O:\Stack\Over\Flow\*.pkl')
dfs_with_source = []

for fp in files:
    source_filename = os.path.basename(fp)
    # 给每个DataFrame添加来源文件名列
    single_df = pd.read_pickle(fp, compression='xz').assign(source_file=source_filename)
    dfs_with_source.append(single_df)

# 合并所有DataFrame
combined_df = pd.concat(dfs_with_source, ignore_index=True)

两种统计行数的方法

  • 方法一:用value_counts快速计数
row_counts = combined_df['source_file'].value_counts().reset_index()
row_counts.columns = ['filename', 'row_count']
print(row_counts)
  • 方法二:用groupby分组统计
row_counts = combined_df.groupby('source_file').size().reset_index(name='row_count')
print(row_counts)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:25:06