python合并两个csv文件python

时间:2019-11-22 16:57:24

标签: python csv

我有2个CSV文件。

File1.csv

    Frame_Nr; Data1; Data2; Labeled
    0          0       1        1
    1          0       0        1
    2          1       1        1
    3          0       0        0
    4          0       0        0
    5          1       0        1
    6          0       0        0
    7          0       0        0
   11          0       1        1
   12          1       1        1

File2.csv

Frame_Nr; Data1; Data2; Labeled
    0          0       0        0
    1          0       0        0
    2          0       0        0
    3          0       0        0
    4          0       0        0
    5          0       0        0
    6          0       0        0
    7          0       0        0
    8          0       0        0
    9          0       0        0
   10          0       0        0

我希望输出看起来像这样。并且应将 file2.csv 与文件 file1.csv 合并,如果有一些更改要替换为 file1.csv 中的数据,否则保留数据来自 file2.csv

预期的 output.csv

    Frame_Nr; Data1; Data2; Labeled
    0          0       1        1
    1          0       0        1
    2          1       1        1
    3          0       0        0
    4          0       0        0
    5          1       0        1
    6          0       0        0
    7          0       0        0
    8          0       0        0
    9          0       0        0
   10          0       0        0
   11          0       1        1
   12          1       1        1

我的代码:

import csv
import os

f = open('file2', 'r')
reader = csv.reader(f, delimiter=';')   
reader = list(reader)
f1 = open('file1', 'r')
reader1 = csv.reader(f1, delimiter=';')
next(reader1)
reader1 = list(reader1)


for line1 in reader1:
    for line in reader:
        if line1[0] != line[0]:
            print(line1)
        else:
            print(line)

2 个答案:

答案 0 :(得分:2)

Pandas具有两个非常好的功能,可以帮助您避免嵌套的for循环并提高处理效率:

import pandas as pd
df1 = pd.read_csv('file1.csv', options='whatever makes your csvs load')
df2 = pd.read_csv('file2.csv', options='whatever makes your csvs load')
df = pd.concat([df1, df2]).drop_duplicates('Frame_Nr')

(可选)如果希望将结果DataFrameFrame_Nr排序,请将.sort_values('Frame_Nr')链接到最后一行

要说明代码段,请执行以下操作:pd.concat连接两个DataFrame,以便首先拥有文件1中的所有行,然后拥有文件2中的所有行,之后的drop_duplicates将删除所有具有重复值的行在Frame_Nr中保持第一。由于file1是串联中的第一个文件,因此将保留该文件中的所有行,并且仅保留file2中的行,如果它们的帧号不在file1中。或者,sort_values将按帧号列对DataFrame进行排序

答案 1 :(得分:2)

import pandas as pd

df1 = pd.read_csv("file1.csv", delim_whitespace=True)
df2 = pd.read_csv("file2.csv", delim_whitespace=True)

df=pd.concat([df1, df2]).drop_duplicates('Frame_Nr;').sort_values("Frame_Nr;")