【问题标题】:Extract same column from two CSV files, and merge it从两个 CSV 文件中提取同一列,并将其合并
【发布时间】:2020-04-18 09:43:23
【问题描述】:

所以我有两个 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 文件上。

我该怎么做?

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

【问题讨论】:

  • 您要从两个文件的列中查找哪些共同信息?
  • @Shubham Sharma 我正在尝试提取涉及 a.csv 和 b.csv 的列...a.csv 没有类别列,所以我想从名称中提取两个 csv到国家,而不是删除包含 NA 的行

标签: python csv compare


【解决方案1】:

1.使用熊猫:

用途:

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。不使用熊猫:

用途:

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])

【讨论】:

  • 感谢您的热心回复,但是不使用 pandas 模块还有其他可能的方法来解决此类问题吗?
  • 可能,但使用 pandas 会容易得多。
  • 我已经用第二种解决方案尝试了类似的解决方案,但它在结果中包含了类别,并且没有跳过包含 "Na" 的行。
  • @goldenasian 你确定吗? csv 文件 ab 中的分隔符是什么?
  • 很确定是' '
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2017-12-21
  • 2018-03-30
  • 2011-12-25
  • 2019-10-05
  • 1970-01-01
相关资源
最近更新 更多