提问人:doughstone 提问时间:11/13/2023 更新时间:11/13/2023 访问量:37
联接两个具有不同键列名称的 DataFrame
Join two DataFrame with different key column name
问:
我想将 courseFee Dataframe 与 febReg DataFrame 联姻。但它们具有不同的键列名称。对于course,Fee是“CID”,febReg是“course_id”。为什么在此代码中我不能仅使用 left_on= 和 right_on= 参数进行连接?
法典
import pandas as pd
folder = r'C:\Users\pulun\hbrag08\Durga Software\Complete Python Package\Python for Data Science\04. Pandas\DataFrame'
studentDataScr = folder+r'\\student_data.csv'
courseFeeScr = folder+r'\\course_fee.csv'
febRegScr = folder+r'\\february_registration.csv'
janResScr = folder+r'\\january_registration.csv'
def csvReader(fileName, delimiter, *args,):
x = None
n = None
if len(args) == 1:
for i in args:
x = i
n = None
else:
x = args
n = x[0]
return pd.read_csv(fileName,
usecols=x,
index_col=n,
sep=delimiter)
studentData = csvReader(studentDataScr, ';', 'student_id',
'student_name', 'gender', 'mobile_number', 'email')
courseFee = csvReader(courseFeeScr, ';', 'course_id', 'course_name', 'fee')
regColumn = ['student_id', 'course_id']
janReg = csvReader(janResScr, ';', regColumn)
febReg = csvReader(febRegScr, ';', regColumn)
courseFee.rename(columns={'course_id': 'CID'}, inplace=True)
joinTwo = pd.merge(courseFee, febReg, left_on='CID', right_on='course_id')
print(joinTwo.head())
错误输出
Exception has occurred: KeyError
'CID'
答:
1赞
mozway
11/13/2023
#1
我不确定该函数到底应该做什么,但它的构建不正确。csvReader
通过将列表打包并作为参数传递,将是单个项目的元组:您的列表,并且将始终为 None。*args
args
n
要么重写函数,要么传递解压缩的列表:
janReg = csvReader(janResScr, ';', *regColumn)
其次,传递并不意味着您的数据一定会包含这些列。如果数据集中不存在它们,则它们将不存在。我相当确定文件中首先没有列。因此,重命名不会做任何事情,并且会失败。usecols
course_id
merge
评论
0赞
doughstone
11/13/2023
我是这里的新手。使用 csvReader 函数是因为我刚刚学习了 Python 中的函数。因此,而不是使用 read_csv() 和其他参数。我选择创建。course_id在我的文件中,因为它只有两列,course_id和student_id。
0赞
doughstone
11/13/2023
#2
这行代码救了我。首先我需要重置索引,然后我需要重命名列。
courseFee.reset_index(inplace=True)
courseFee.rename(columns={'course_id': 'CID'}, inplace=True)
评论