Извлеките один и тот же столбец из двух файлов CSV и объедините его - PullRequest
1 голос
/ 18 апреля 2020

Итак, у меня есть два 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, и попытался пропустить строку, содержащую 'NA', при чтении файла csv origian a, b, но мне не удалось ... лучше удалить строку которые содержат NA после слияния двух файлов вместе?

1 Ответ

0 голосов
/ 18 апреля 2020

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...