使用pandas / python加入两个csv文件,无需重复

时间:2016-07-03 16:54:57

标签: python csv pandas

我想连接2个csv文件。每个CSV文件都具有以下结构:

档案1

id,name,category-id,lat,lng 4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208431 4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353 51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735

文件2

id,name,category-id,lat,lng 4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208432 4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353 51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735 5748729449,Duomo Di Milano,52e81612bc,45.463898,9.192034

我得到了一个看起来像

的最终csv

最终文件

id,name,category-id,lat,lng 4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208431 4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208432 4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353 51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735 5748729449,Duomo Di Milano,52e81612bc,45.463898,9.192034

所以我这样做了:

import pandas as pd

df1=pd.read_csv("file1.csv")
df2=pd.read_csv("file2.csv")

full_df = pd.concat(df1,df2)

full_df = full_df.groupby(['id','category_id','lat','lng']).count()

full_df2 = full_df[['id','category_id']].groupby('id').agg('count')

full_df2.to_csv("final.csv",index=False)

我尝试通过id,categoy_id,lat和lng分组,名称可能会改变 在第一个groupby之后,我想再次分组,但是现在由id和category_id组成,因为如我的例子中所示,第一行改变为long,但这可能是因为file2是file1的更新

我不了解groupby,因为当我尝试打印时,我只得到了计数值。

2 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是在连接两个DataFrame之后使用df.drop_duplicates()。另外,drop_duplicates有一个参数" keep",它允许您指定要保留最后一次出现的重复项。

full_df = pd.concat([df1,df2])
unique_df = full_df.drop_duplicates(keep='last')

如果您需要进一步的帮助,请检查documentation是否有drop_duplicates。

答案 1 :(得分:0)

我可以使用下一个代码来解决这个问题:

import pandas as pd

df1=pd.read_csv("file1.csv")
df2=pd.read_csv("file2.csv")

df_final=pd.concat([df1,df2]).drop_duplicates(subset=['id','category_id','lat','lng']).reset_index(drop=True)
print(df_final.shape)

df_final2=df_final.drop_duplicates(subset=['id','category_id']).reset_index(drop=True)

df_final2.to_csv('final', index=False)