尝试合并两个不同数据框的两列时出现问题?
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】:
-
合并,然后删除和重命名 data 和 area 之间的列
在第 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 |
【讨论】:
以上是关于尝试合并两个不同数据框的两列时出现问题?的主要内容,如果未能解决你的问题,请参考以下文章