繁体   English   中英

Python:合并多个文本文件

[英]Python: merging multiple text files

我是Python的新手,不是很多编码员。 我有40多个要合并在一起的文本文件(在“宽” csv中,而不是在“高” csv中。也就是说,我不想附加这些文件)并生成一个新的csv。

使用Pandas(合并)可以实现我想要的功能,但是我认为有一种更简单的方法。 这里是七个文件:


将熊猫作为pd导入

a = pd.read_csv("c:/pyTest/B01001.txt")
b = pd.read_csv("c:/pyTest/B01002.txt")
c = pd.read_csv("c:/pyTest/B01003.txt")
d = pd.read_csv("c:/pyTest/B02001.txt")
e = pd.read_csv("c:/pyTest/B05001.txt")
f = pd.read_csv("c:/pyTest/B05002.txt")
g = pd.read_csv("c:/pyTest/B05012.txt")

merged = a.merge(b.merge(c.merge(d.merge(e.merge(f.merge(g, on='GEOID'), on='GEOID'), on='GEOID'), on='GEOID'), on='GEOID'), on='GEOID')
merged.to_csv("c:/pytest/fook.csv", index=False)

如果在输出文件中也没有重复重复的列名(例如“ GEOID”),那将是很好的。

各位专家的任何帮助,我们将非常感谢。

您可以使用reducemerge应用于DataFrame列表:

import pandas as pd
import functools

files = ["c:/pyTest/B01001.txt", "c:/pyTest/B01002.txt", "c:/pyTest/B01003.txt",
         "c:/pyTest/B02001.txt", "c:/pyTest/B05001.txt", "c:/pyTest/B05002.txt",
         "c:/pyTest/B05012.txt",]
dfs = [pd.read_csv(filename).set_index('GEOID') for filename in files]
mergefunc = functools.partial(pd.merge, left_index=True, right_index=True)
merged = functools.reduce(mergefunc, dfs)

merged.to_csv("c:/pytest/fook.csv", index=False)

当Pandas根据索引 (而不是列)合并两个DataFrame时,结果DataFrame将使用合并的索引。 因此,您可以通过合并索引来避免GEOID列重复。


例如:

In [99]: import numpy as np
In [100]: import pandas as pd
In [101]: import functools

In [102]: dfs = [pd.DataFrame(np.arange(6).reshape(3,2), columns=['A','B{}'.format(i)]).set_index('A') for i in range(3)]

In [103]: mergefunc = functools.partial(pd.merge, left_index=True, right_index=True)    
In [104]: merged = functools.reduce(mergefunc, dfs)

In [105]: merged
Out[105]: 
   B0  B1  B2
A            
0   1   1   1
2   3   3   3
4   5   5   5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM