![](/img/trans.png)
[英]Loop through Multiple CSV Files and Merge with Specific Columns [Pandas]
[英]How to merge multiple csv files into one file with specific columns on pandas, python?
我有 4 個不同的 csv 文件。
csv1:
ID Fruit
1001 Apple
1002 Banana
1003 Kiwi
csv2:
ID Color
1001 Green
1005 Red
1006 Orange
1007 Yellow
csv3:
ID Size
1001 Large
1008 Small
1009 Medium
1010 Large
csv4:
ID Price
1002 20
1009 40
1010 30
1011 50
這是我要制作的主 csv 文件:
Number ID Fruit Color Size Price
1 1001 Apple Green Large
2 1002 Banana 20
3 1003 Kiwi
4 1005 Red
5 1006 Orange
6 1007 Yellow
7 1008 Small
8 1009 Medium 40
9 1010 Large 30
10 1011 50
我認為使用pandas會更容易做到,但我不知道Python 。
由於每個 csv 文件都有不同的列,我如何選擇列並將它們全部粘貼到主 csv 文件上? 如果沒有信息,我想將其設為 NULL 或 N/A 值。
您可以看到每個 csv 文件和主文件:單擊此處查看圖像
我已經花了 6 個小時,但我不知道該怎么做。
先感謝您。
reduce
+ combine_first
關鍵是將'ID'
設置為索引,這樣我們就可以在兩個軸上獲得正確的 alignment。 我假設所有 DataFrame 都在 memory 中,但如果不是,您可以將它們讀入列表,或者在reduce
步驟中進行讀取。
from functools import reduce
my_dfs = [df.set_index('ID') for df in [df1, df2, df3, df4]]
#my_dfs = [pd.read_csv(file).set_index('ID') for file in your_list_of_files]
reduce(lambda l,r: l.combine_first(r), my_dfs)
Color Fruit Price Size
ID
1001 Green Apple NaN Large
1002 NaN Banana 20.0 NaN
1003 NaN Kiwi NaN NaN
1005 Red NaN NaN NaN
1006 Orange NaN NaN NaN
1007 Yellow NaN NaN NaN
1008 NaN NaN NaN Small
1009 NaN NaN 40.0 Medium
1010 NaN NaN 30.0 Large
1011 NaN NaN 50.0 NaN
像這樣的東西應該工作:
import pandas as pd
list_of_csv_filenames = ['csv1.csv', 'csv2.csv', 'csv3.csv', 'csv4.csv']
all_dfs = []
for i in range(1, 5):
temp = pd.read_csv(list_of_csv_filesnames[i-1])
temp['Number'] = i
all_dfs.append(temp)
full_df = pd.concat(all_dfs)
full_df.to_csv('output_filename.csv', index=False)
通過三個簡單的步驟執行以下操作。
**STEP-1:導入包並設置工作目錄**
將“/mydir”更改為您想要的工作目錄。
import os
import glob
import pandas as pd
os.chdir("/mydir")
**STEP-2:使用 glob 匹配模式 'csv' **
匹配模式 ('csv') 並將文件名列表保存在 'all_filenames' 變量中。 您可以查看此鏈接以了解有關正則表達式匹配的更多信息。
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
第三步:合並列表中的所有文件,導出為 CSV
使用 pandas 連接列表中的所有文件並導出為 CSV。 output 文件名為“combined_csv.csv”,位於您的工作目錄中。
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
添加了 encoding = 'utf-8-sig' 以解決導出“非英語”語言時的問題。
而且……完成了!
任何一個:
fout=open("out.csv","a")
# first file:
for line in open("sh1.csv"):
fout.write(line)
# now the rest:
for num in range(2,201):
f = open("sh"+str(num)+".csv")
f.next() # skip the header
for line in f:
fout.write(line)
f.close() # not really needed
fout.close()
您可以使用合並:
import pandas as pd
df1 = pd.read_csv('1.csv')
df2 = pd.read_csv('2.csv')
df3 = pd.read_csv('3.csv')
df4 = pd.read_csv('4.csv')
df = df1.merge(df2).merge(df3).merge(df4)
df.to_csv('result.csv')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.