【发布时间】:2016-02-21 05:10:23
【问题描述】:
我想使用 Python pandas 附加(合并)文件夹中的所有 csv 文件。
例如:说文件夹有两个csv文件test1.csv和test2.csv如下:
A_Id P_Id CN1 CN2 CN3
AAA 111 702 709 740
BBB 222 1727 1734 1778
和
A_Id P_Id CN1 CN2 CN3
CCC 333 710 750 750
DDD 444 180 734 778
所以我写的python脚本如下:
#!/usr/bin/python
import pandas as pd
import glob
all_data = pd.DataFrame()
for f in glob.glob("testfolder/*.csv"):
df = pd.read_csv(f)
all_data = all_data.append(df)
all_data.to_csv('testfolder/combined.csv')
虽然combined.csv 似乎有所有附加的行,但它看起来如下:
CN1 CN2 CN3 A_Id P_Id
0 710 750 750 CCC 333
1 180 734 778 DDD 444
0 702 709 740 AAA 111
1 1727 1734 1778 BBB 222
它应该看起来像这样:
A_ID P_Id CN1 CN2 CN2
AAA 111 702 709 740
BBB 222 1727 1734 1778
CCC 333 110 356 123
DDD 444 220 256 223
- 为什么前两列移到最后?
- 为什么附加在第一行而不是最后一行?
我错过了什么?以及如何在第一列中获取 0 和 1?
P.S:由于这些是大型 csv 文件,我想到了使用 pandas。
【问题讨论】:
-
熊猫使用什么版本的?因为它在 0.17.0 中运行良好。
-
我认为问题出在 csv 格式上 - 在行后尝试
df = pd.read_csv(f)添加print df.head()进行检查。 -
我认为您将输出读取为输入
glob.glob("testfolder/*.csv"):,因为输出写入输入目录:all_data.to_csv('testfolder/combined.csv'),您必须将目录更改为all_data.to_csv('out/combined.csv') -
你可以通过添加参数
index=Falseall_data.to_csv('out/combined.csv', index=False)来摆脱0和1 -
您可以按文件名对输入文件进行排序:
for f in sorted(glob.glob("testfolder/*.csv")):。这将在 test2.csv 之前读取 test1.csv,并确保行的顺序正确...