我有多个(大)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),并使用python内置模块将其写入csv文件。
我认为代码很难阅读/理解。有没有更简单的解决方案,即避免为此任务将数据帧中的数据放入列表结构中?
答案 0 :(得分:1)
考虑使用熊猫合并功能。
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"])
答案 1 :(得分:1)
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']
编辑:如果您不想删除此特定列,只需显示要使用的列:
df=df[['gender','name','age']]
print(df)
gender name age
0 male john 34
1 female kim 27