2017-07-07 31 views
0

我有一列有4個CSV文件。每一列代表一個名稱的一部分(4份):Python3熊貓 - 如何創建4列的所有組合,並將它們寫入CSV中的行?

CSV 1:

first_name 
michael 
madonna 
steve 
albert 

CSV 2:

second_name 
luke 
han 
kurt 

CSV 3:

first_last_name 
jackson 
jobs 
skywalker 

CSV 4:

second_last_name 
solo 
cobain 
einstein 

最終的結果我想是所有的4列(4個CSV的)之間,以獲得所有可能的組合:

first_name,second_name,first_last_name,second_last_name 
michael,luke,jackson,solo 
michael,luke,jackson,cobain 
michael,luke,jackson,einstein 
michael,luke,jobs,solo 
michael,luke,jobs,cobain 
michael,luke,jobs,einstein 
michael,luke,skywalker,solo 
michael,luke,skywalker,cobain 
michael,luke,skywalker,einstein 
... 

隨着熊貓我轉換每個CSV納入數據框但我不知道如何將所有四個組合。我怎樣才能做到這一點?

回答

0

使用itertools.product進行繁重的工作。

import pandas as pd 
from itertools import product 

lists = [list(pd.read_csv('data{}.csv'.format(i), header=0).iloc[:,0]) for i in range(1,5)] 
combined = list(','.join(items) for items in product(*lists)) 
pd.DataFrame(combined).to_csv('combined.csv', index=0) 

如果您只是想要列表形式,請使用combined。它看起來像:

['michael,luke,jackson,solo', 
'michael,luke,jackson,cobain', 
'michael,luke,jackson,einstein', 
'michael,luke,jobs,solo', 
'michael,luke,jobs,cobain', 
'michael,luke,jobs,einstein', 
'michael,luke,skywalker,solo', 
'michael,luke,skywalker,cobain', 
'michael,luke,skywalker,einstein', 
... 

或者最後一行將組合值寫入CSV。

2
import numpy as np 
import pandas as pd 
import itertools 
import functools 

def cartesian(df1, df2): 
    rows = itertools.product(df1.iterrows(), df2.iterrows())  
    df = pd.DataFrame(left.append(right) for (_, left), (_, right) in rows) 
    return df.reset_index(drop=True) 

df1 = pd.read_csv('first_name.csv') 
df2 = pd.read_csv('second_name.csv') 
df3 = pd.read_csv('first_last_name.csv') 
df4 = pd.read_csv('second_last_name.csv') 

combined = functools.reduce(cartesian, [df1, df2, df3, df4]) 
combined.to_csv('combined.csv') 
相關問題