我想使用Python pandas将所有csv文件附加(合并)到文件夹中。
例如:Say文件夹有两个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 :(得分:13)
试试这个......
all_data = all_data.append(df)[df.columns.tolist()]
答案 1 :(得分:4)
我有同样的问题而且很痛苦。我设法通过在将列附加到最终数据帧之后根据源数据帧重新组织列来解决它。它看起来像这样:
#!/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 = all_data[df.columns]
all_data.to_csv('testfolder/combined.csv')
由于您的问题来自差不多两年前,我发布的解决方案对我来说也适用于其他也将面临类似问题的人。
答案 2 :(得分:3)
您可以使用reindex更改为原始顺序:
all_data = all_data.append(df)
all_data = all_data.reindex(df.columns, axis=1)
我在这里看到了这个(链接中有更多详细信息):https://github.com/pandas-dev/pandas/issues/4588#issuecomment-44421883
答案 3 :(得分:1)
我调整了以下代码。评论内联。
#!/usr/bin/python
import pandas as pd
import glob
# Grab all the csv files in the folder to a list.
fileList = glob.glob('input_folder/*.csv')
#Initialize an empty dataframe to grab the csv content.
all_data = pd.DataFrame()
#Initialize an empty list to grab the dataframes.
dfList= []
for files in fileList:
df = pd.read_csv(files, index_col = None, header= False)
dfList.append(df)
#The frames will be in reverse order i.e last read file's content in the begining. So reverse it again
Reversed_dfList = dfList[::-1]
CombinedFrame = pd.concat(Reversed_dfList)
# The "Combined.csv" file will have combination of all the files.
CombinedFrame.to_csv('output_folder/Combined.csv', index=False)
答案 4 :(得分:1)
从0.23.0版开始,您可以阻止append()
方法对最后附加的DataFrame进行排序。就您而言:
all_data = all_data.append(df, sort=False)
答案 5 :(得分:-1)
all_data = all_data.append(df, ignore_index=True)
设置 ignore_index=True 以便顺序不会改变。
默认情况下为 False
,因此您需要更改它。