尝试合并两个不同数据框的两列时出现问题?

Posted

技术标签:

【中文标题】尝试合并两个不同数据框的两列时出现问题?【英文标题】:Problem while trying to merge two columns of two different dataframes? 【发布时间】:2021-05-17 07:10:53 【问题描述】:

在使用 Pandas 处理和操作数据帧方面,我目前面临一个似乎无法解决的问题。

让您了解我正在谈论的数据帧以及您将在我的代码中看到的数据:

我正在尝试将数据集“data”的“exercise”列中的单词更改为“exercise”数据集的“name”列中的单词。

例如,“data”数据集的“运动”列中的首字母缩写词“Dl”应更改为“运动”数据集的“名称”列中的“Dead lifts”。

我尝试了很多方法,但似乎都失败了。我每次都收到相同的错误。

这是我尝试过的方法的代码:

### Method 1 ###

# Rename Name Column in 'exercise'
exercise = exercise.rename(columns='label': 'exercise')

# Merge Exercise Columns in 'exercise' and in 'data'
data = pd.merge(data, exercise, how = 'left', on='exercise')

### Method 2 ###
data.merge(exercise, left_on='exercise', right_on='label')

### Method 3 ###

data['exercise'] = data['exercise'].astype('category')
EXERCISELIST = exercise['name'].copy().to_list()
data['exercise'].cat.rename_categories(new_categories = EXERCISELIST, inplace = True)
                
### Same Error, New dataset ###

# Rename Name Column in 'area'
area = area.rename(columns='description': 'area')

# Merge Exercise Columns in 'exercise' and in 'data'
data = pd.merge(data, area, how = 'left', on = 'area')

这是我得到的错误:

Traceback(最近一次调用最后一次):

文件“---”,第 232 行,在 data.to_frame().merge(exercise, left_on='exercise', right_on='label')

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/frame.py”,第 8192 行,合并中 返回合并(

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/reshape/merge.py”,第 74 行,合并 op = _MergeOperation(

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/reshape/merge.py”,第 668 行,在 init ) = self._get_merge_keys()

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/reshape/merge.py”,第 1046 行,在 _get_merge_keys left_keys.append(left._get_label_or_level_values(lk))

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/generic.py”,第 1683 行,在 _get_label_or_level_values 引发 KeyError(key)

KeyError: '锻炼'

有人可以帮我解决这个问题吗?非常感谢您。

【问题讨论】:

叫我疯了,但是在回溯中导致错误的代码行似乎不在您提交的代码示例中。 另外,我看到您使用的是 Python 3.9。我会仔细检查 pandas 是否支持 3.9。 在数据 dataframe 上,运行此命令,然后复制粘贴结果:print(data.columns) 这只是三个数据帧之间的merge()。经典加入 【参考方案1】:
    合并,然后删除和重命名 dataarea 之间的列 在第 1 步和 练习 之间合并、然后删除和重命名列
area = pd.DataFrame("arealabel":["AGI","BAL"],
                    "description":["Agility","Balance"])
exercise = pd.DataFrame("description":["Jump rope","Dead lifts"],
                        "label":["Jr","Dl"])
data = pd.DataFrame("exercise":["Dl","Dl"],
                    "area":["AGI","BAL"],
                    "level":[0,3])

(data.merge(area, left_on="area", right_on="arealabel")
 .drop(columns=["arealabel","area"])
 .rename(columns="description":"area")
 .merge(exercise, left_on="exercise", right_on="label")
 .drop(columns=["exercise","label"])
 .rename(columns="description":"exercise")
)
level area exercise
0 0 Agility Dead lifts
1 3 Balance Dead lifts

【讨论】:

以上是关于尝试合并两个不同数据框的两列时出现问题?的主要内容,如果未能解决你的问题,请参考以下文章

尝试选择两列时出现 np.where 错误

与熊猫外部合并时出现重复问题

合并数据透视表中的两列

如何基于一个数据框中的一列和第二个数据框中的两列合并两个数据框

将数据库一个表的两列数据合并且去重

将数据框的两列转换为命名向量