gpt4 book ai didi

python - Pandas 数据帧 : merge files by common columns

转载 作者:行者123 更新时间:2023-12-01 01:25:48 24 4
gpt4 key购买 nike

我有一个文件集合,其中有一些我想要加入的常见列。在我的实际问题中,有几个不同和共同的列。在此玩具示例中,我有一组 a 文件和一组 b 文件,它们具有唯一的列并共享相同的 c 列。

$ for ii in $(ls *.dat) ; do echo " "; echo $ii ; cat $ii ; done

a1.dat
a,c
4,8
1,10
2,3

a2.dat
a,c
1,2
3,4

b1.dat
b,c
2,8
2,10
1,3

b2.dat
b,c
.2,2
.8,4

我想扫描这些文件并将它们合并到一个数据帧中。这是我到目前为止所尝试过的。我连接第一个文件以确保收集了所有列名称,然后合并其余文件。当我按“内部”合并时,会返回一个空数据框。

$ cat s.py 
import pandas as pd
dat = pd.DataFrame()
for ii in [1, 2]:
for jj in ['a', 'b']:
d = pd.read_csv('%s%i.dat' % (jj, ii))
if ii == 1: dat = pd.concat([dat, d])
else: dat = pd.merge(dat, d, how='outer')
print(dat)

$ Python s.py
a b c
0 4.0 NaN 8
1 1.0 NaN 10
2 2.0 NaN 3
3 NaN 2.0 8
4 NaN 2.0 10
5 NaN 1.0 3
6 1.0 NaN 2
7 3.0 NaN 4
8 NaN 0.2 2
9 NaN 0.8 4

这不是我想要的输出。我不明白如何才能让这项工作变得更好。所需的输出是

     a    b   c
0 4.0 2.0 8
1 1.0 2.0 10
2 2.0 1.0 3
3 1.0 0.2 2
4 3.0 0.8 4

最佳答案

有两个步骤:

首先,将所有相同类型的文件连接到一个 DataFrame 中:

df = {}
for k in ['a', 'b']:
df[k] = pd.concat([
pd.read_csv('%s%d.dat' % (k, i)) for i in [1, 2]
], axis=0)

然后在共享列“c”上合并联接,

result = df['a'].merge(df['b'], on='c')[['a', 'b', 'c']]

关于python - Pandas 数据帧 : merge files by common columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53355702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com