繁体   English   中英

从两个 CSV 文件中提取相同的列,并将其合并

[英]Extract same column from two CSV files, and merge it

所以我有两个 CSV 文件,我正在尝试比较并获得该项目的结果具有相同的列。 第一个文件 a.csv 如下所示:

name          pubmedid    country 
legge          3064733      U.S
legge          3034763      U.S
Hoffman        2888122      NA

第二个 CSV 是 b.csv 看起来像:

name          pubmedid    country  category
Sung           3454733      U.K    European
NA             2035763      U.S    American
Hoffman        3194992      NA     Asian
legge          3064733      U.S    African-American

我想从两个文件共有的列中提取信息

而不是将其合并到一个 CSV 文件中,并删除所有包含“NA”的行

所以我想要的结果看起来像:

name          pubmedid    country 
legge          3064733      U.S
legge          3034763      U.S
Sung           3454733      U.K   
legge          3064733      U.S   

比我想在 c.csv 文件上写这个结果。

我怎样才能做到这一点?

我试图找到不使用 pandas 的方法来做到这一点,因为我仍然没有完全理解 pandas 是如何工作的,并尝试在读取原点 a、b Z628CB5675FF524F3E719B 文件时跳过包含“NA”的行但失败了。 . 将两个文件合并在一起后删除包含 NA 的行会更好吗?

1. 使用 pandas:

利用:

import pandas as pd

df1 = pd.read_csv('a.csv', sep="\s+")
df2 = pd.read_csv('b.csv', sep="\s+")

df = pd.concat([df1.dropna(), df2[["name", "pubmedid", "country"]].dropna()])
print(df)

这打印:

    name  pubmedid country
0  legge   3064733     U.S
1  legge   3034763     U.S
0   Sung   3454733     U.K
3  legge   3064733     U.S

要将此df保存到 csv 文件,

df.to_csv("c.csv", index=False)

2. 不使用 pandas:

利用:

import csv

with open("a.csv", "r") as fa, open("b.txt", "r") as fb, open("c.csv", "w") as fc:
    writer = csv.writer(fc, delimiter=' ')

    reader = csv.reader(fa, delimiter=' ', skipinitialspace=True)
    for line in reader:
        if "NA" not in line:
            writer.writerow(line)

    next(fb) # skip header
    reader = csv.reader(fb, delimiter=' ', skipinitialspace=True)
    for line in reader:
        if "NA" not in line:
            writer.writerow(line[:-1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM