如何用pandas通过中间文件合并两个文件

bvjxkvbb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(94)

我试图合并3个表,其中2个包含信息,另一个只是中间文件,
我需要的预期答案是这样的:

'userId', 'bookId', 'likes', 'title', 'author', 'Location', 'Age'

只有我需要做一个连接像在数据库mysql,postgres等
这些列是:

import pandas as pd

r_names = ['userId', 'bookId', 'likes']
cols1 = ['userId', 'bookId', 'likes']

u_names = ['userId', 'Location', 'Age']
cols2 = ['userId', 'Location', 'Age']

b_names = ['bookId','title', 'author']
cols3 = ['bookId','title', 'author']

我正在阅读这样的文件:

df1 = pd.read_csv('Ratings.csv', header=None, encoding="ISO-8859-1", names=r_names, usecols=cols1, index_col='userId')
df2 = pd.read_csv('Users.csv', header=None, encoding="ISO-8859-1", names=u_names, usecols=cols2, index_col='userId')
df3 = pd.read_csv('Books.csv', header=None, encoding="ISO-8859-1", names=b_names, usecols=cols3, index_col='bookId')

但我注意到,只有它的合并2文件的信息是不完整的

df4 = pd.merge(df1, df2, how='outer', on=['userId'])
df5 = pd.merge(df3, df4, how='outer', on=['bookId'])

df5.to_csv('dataset', sep='\t', encoding='utf-8')
result = df5.head(10)
print("First 10 rows of the DataFrame:")
print(result)
8yoxcaq7

8yoxcaq71#

我建议导入数据的方式稍微不同(即不要将关键列作为索引)。将关键列作为索引并没有什么错,但是如果导入数据的方式稍有不同,现有的合并也会很好地工作-完全取决于您。因此,要么改变导入(如下所示),要么改变合并的方式:)
我的建议是:

import pandas as pd

rating_names = ['userId', 'bookId', 'likes']
cols1 = ['userId', 'bookId', 'likes']
user_names = ['userId', 'Location', 'Age']
cols2 = ['userId', 'Location', 'Age']
books_names = ['bookId','title', 'author']
cols3 = ['bookId','title', 'author']

df1 = pd.read_csv('Ratings.csv', header=0, encoding="ISO-8859-1", names=rating_names, usecols=cols1)
df2 = pd.read_csv('Users.csv', header=0, encoding="ISO-8859-1", names=user_names, usecols=cols2)
df3 = pd.read_csv('Books.csv', header=0, encoding="ISO-8859-1", names=books_names, usecols=cols3)

df4 = pd.merge(df1, df2, how='outer', on=['userId'])
df5 = pd.merge(df3, df4, how='outer', on=['bookId'])

df 5的前10行:
| bookId|标题|作者|userId|喜欢|位置|年龄|
| --|--|--|--|--|--|--|
| 0195153448 |古典神话|马克·P·O·莫福德|2.0| 0.0|美国加州州斯托克顿|十八点零|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|8.0| 5.0|天气-安大略省,加拿大|楠|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|11400.0| 0.0|天气-安大略,加拿大|四十九点零|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|11676.0| 8.0|不适用,不适用,不适用|楠|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|41385.0| 0.0|天气-萨德伯里,加拿大|楠|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|67544.0| 8.0|加拿大安大略省多伦多|30.0|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|85526.0| 0.0|加拿大不列颠哥伦比亚省维多利亚|36.0|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|96054.0| 0.0|天气-安大略,加拿大|29.0|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|116866.0|九点零|渥太华,,|楠|
| 0002005018 |克拉拉·卡兰|理查德·布鲁斯·赖特|123629.0|九点零|天气-金斯顿,加拿大|楠|

相关问题