Объединить определенные данные столбца из нескольких файлов CSV - PullRequest
0 голосов
/ 26 июня 2019

У меня есть несколько (больших) CSV-файлов, пусть они будут 1.csv и 2.csv. Оба имеют одинаковый столбец уникального идентификатора. Например, с идентификатором name:

1.csv                     2.csv

name,age,height           name,gender
john,34,176               john,male
mary,19,183               kim,female
kim,27,157

из этих CSV-файлов я создаю два кадра данных df1 и df2.

Цель состоит в том, чтобы объединить некоторые данные (не все столбцы). Условие состоит в том, что человек существует в обоих CSV-файлах:

result

name,age,gender
john,34,male
kim,27,female

Для этого я сделал следующее:

names = df1['name'].tolist()

result_rows = []
for name_iter in names :
    age_df =    df1[df1['name'] == name_iter ][['age']]
    gender_df = df2[df2['name'] == name_iter ][['gender']]

    if gender_df.empty:
        continue

    age = age_df.values[0][0]
    gender = gender_df.values[0][0]
    row = [name, age, gender]

    result_rows.append(row)

После этого у меня есть список списков (result_rows), которые я записываю в файл csv со встроенным модулем python.

Я думаю, что код трудно читать / понимать. Есть ли более простое решение, то есть, чтобы не помещать данные из фреймов данных в структуру списка для этой задачи?

Ответы [ 2 ]

1 голос
/ 26 июня 2019
df1=pd.DataFrame({'name':['john','mary','kim'],'age':[34,19,27],'height':[176,183,157]})
df2=pd.DataFrame({'name':['john','kim'],'gender':['male','female']})
df=df2.merge(df1,on='name')
del df['height']

edit: если вы не хотите удалять этот конкретный столбец, просто укажите, какие столбцы вы хотите использовать:

df=df[['gender','name','age']]
print(df)
   gender  name  age
0    male  john   34
1  female   kim   27
1 голос
/ 26 июня 2019

Рассмотрите возможность использования функции слияния панд.

import pandas as pd

# If 'name' is the only identifier in both DFs:
df3 = df1.merge(df2, on="name")

# Else if 'name', 'age', and 'gender' are available in both DFs:
df3 = df1.merge(df2, on=["name", "age", "gender"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...