我试图合并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)
1条答案
按热度按时间8yoxcaq71#
我建议导入数据的方式稍微不同(即不要将关键列作为索引)。将关键列作为索引并没有什么错,但是如果导入数据的方式稍有不同,现有的合并也会很好地工作-完全取决于您。因此,要么改变导入(如下所示),要么改变合并的方式:)
我的建议是:
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|九点零|天气-金斯顿,加拿大|楠|