【问题标题】:Python: merging multiple text filesPython:合并多个文本文件
【发布时间】:2014-12-02 07:38:31
【问题描述】:

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

使用 Pandas (merge) 我能够实现我想要的,但我认为有一种更简单的方法。这是其中的七个文件:


将熊猫导入为 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”)不在输出文件中重复,那就太好了。

非常感谢您的专家提供的任何帮助。

【问题讨论】:

  • 你能给我看一个例子,说明两个文件的外观(只有一行)以及你希望它们如何结束吗?我不遵循你的“高”/“宽”类比。
  • 我觉得这和你想做的很像? stackoverflow.com/questions/18689453/…

标签: python csv pandas merge


【解决方案1】:

您可以将merge 应用于DataFrame 列表using reduce

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 基于 index(而不是列)合并两个 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

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多