[英]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.