联接两个具有不同键列名称的 DataFrame

Join two DataFrame with different key column name

提问人:doughstone 提问时间:11/13/2023 更新时间:11/13/2023 访问量:37

问:

我想将 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'
python pandas 数据帧 合并

评论

1赞 Panda Kim 11/13/2023
我们需要能够重现您的问题以解决您的问题。stackoverflow.com/help/minimal-reproducible-example
0赞 doughstone 11/13/2023
谢谢你的建议,我是新来的。

答:

1赞 mozway 11/13/2023 #1

我不确定该函数到底应该做什么,但它的构建不正确。csvReader

通过将列表打包并作为参数传递,将是单个项目的元组:您的列表,并且将始终为 None。*argsargsn

要么重写函数,要么传递解压缩的列表:

janReg = csvReader(janResScr, ';', *regColumn)

其次,传递并不意味着您的数据一定会包含这些列。如果数据集中不存在它们,则它们将不存在。我相当确定文件中首先没有列。因此,重命名不会做任何事情,并且会失败。usecolscourse_idmerge

评论

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)