【问题标题】: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()。经典加入

标签: python python-3.x pandas dataframe merge


【解决方案1】:
  1. 合并,然后删除和重命名 dataarea 之间的列
  2. 在第 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

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 2017-01-20
    • 1970-01-01
    • 2022-01-10
    • 2022-01-01
    • 2020-10-20
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多