在bash或python中合并两个或两个以上的csv?

时间:2017-06-12 17:39:26

标签: python bash shell csv sh

如果一个file1.csv和file2.csv包含不同的no。列如: 文件1:

Header : Node_Name,SI ,type,SI ,type,Node_Name,SI  ,type,Node_Name 
Data   : Node_0   ,abc,0   ,xyz,0   ,Node_1   ,rwqe,1   ,Node_2

file2的:

Header : Node_Name,SI,type,Node_Name,SI,type,SI,type,Node_Name,SI,type,SI,type
Data   : Node_0,nbv,0,Node_1,afd,0,mnb,1,Node_2,lm,1,uh,0

合并文件:

Header : Node_Name,SI,TYPE,SI,TYPE,NODE_NAME,SI,TYPE,SI,TYPE,NODE_NAME,SI,TYPE,SI,TYPE
         Node_0   ,abc,0  ,xyz,0  ,Node_1   ,rwqe,1 ,0 , 0  ,Node_2   ,0 ,0   ,0 ,0
         Node_0   ,nbv,0  , 0 ,0  ,Node_1   ,afd,0  ,mnb,1  ,Node_2   ,lm,1   ,uh,0

感谢ADAVNCE

2 个答案:

答案 0 :(得分:0)

Python中的一个可能的解决方案是:

#read all the files
f1 = pd.read_csv(file1)
f2 = pd.read_csv(file2)

#find all unique column names
col_names = set(list(f1.index) + list(f2.index))

#reset column names, any column doesn't exist in current table will be NaN
f1 = f1.reindex(columns=col_names)
f2 = f2.reindex(columns=col_names)

#Now combine those
combined = pd.concat([f1, f2],  aixs=0)

#deal with missing values
combined = combined.fillna(0)

等待一个不错的bash解决方案:)

答案 1 :(得分:0)

while read line; do
    echo "$(cut -d, -f-8 <<<"$line"),0,0,$(cut -d, -f9 <<<"$line"),0,0,0,0"
done < file1
while read line; do
    echo "$(cut -d, -f-3 <<<"$line"),0,0,$(cut -d, -f4- <<<"$line")"
done < file2

不是太优雅,但仍在工作。