python-3.x - 加入多个熊猫数据框
问题描述
我存储了 2000 个熊猫数据框。每个数据帧的大小为 ( X ,2) 其中X可以是 100 以上的任何正整数。例如:
##Dataframe 1
entry. feature
entry1 716
entry2 373
entry3 837
##Dataframe 2
entry. feature
entry1 173
entry2 0
entry4 981
entry5 717
##Dataframe 2
entry. feature
entry1 716
entry5 736
我希望最终的数据框看起来像:
##Dataframe 1
entry. Dataframe1. DataFrame2 Dataframe3
entry1 716 173 716
entry2 373 0 0
entry3 837 0 0
entry4 0 981 0
entry5 0 717 736
所以我想要实现的是我想在入口列的基础上加入这些数据框。如果给定条目不存在于数据帧中,例如条目 2 不存在于数据帧 3 中,那么我想在那里将值设置为 0。如何使用我拥有的 2000 个数据框来实现这一目标?见解将不胜感激。
解决方案
您可以将pandas.concat与按axis=1
列连接的选项一起使用:
pd.concat([df1, df2, df3], axis=1)
如果数据存储在磁盘上的文件中,假设它们被命名为 /tmp/dfXXX.csv,您可以使用glob模块和pandas.read_csv组合:
from glob import glob
files = glob('/tmp/df*.csv')
df = pd.concat({f: pd.read_csv(f, sep='\s+', index_col=0)['feature']
for f in files}, axis=1).fillna(0).astype(int)
输出:
/tmp/df1.csv /tmp/df2.csv /tmp/df3.csv
entry1 716 173 716
entry2 373 0 0
entry3 837 0 0
entry4 0 981 0
entry5 0 717 736
注意。我在这里使用 '\s+' 作为分隔符,但这可能会有所不同,具体取决于 csv 文件的实际分隔符
推荐阅读
- c# - 如何使用 WM_NOTIFY 捕获 LVN_BEGINSCROLL 以获取 ListView 的子类?
- ms-access - MS Access 全局变量
- python-3.x - 如何使用用户在 python 中输入打印 6 行 x 7 列的网格日历
- php - 使用自定义 Wordpress API 端点更新 WooCommerce 产品
- java - 如何在蓝牙打印机中设置编码
- jsonschema - 使用 JsonSchema 和 $ref 验证对象的异构列表
- ionic-framework - 在 ionic 3 中创建我的 apk 时出错
- javascript - 无法读取 null javascript 的属性“长度”
- python - 更改 SQL 命令输出中的值以匹配 python 语法
- laravel - 如何从会话数据创建 Laravel 全局变量并在所有视图中可用?