当前位置: 首页 > 知识库问答 >
问题:

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

朱兴安
2023-03-14

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

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

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

例如,数据数据集锻炼列中的首字母缩略词Dl应更改为锻炼数据集名称列中的死电梯。

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

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

### 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()。合并(练习,left_on='练习',right_on='标签')

文件/库/框架/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/reformate/merge.py”,第74行,在merge
op=\u MergeOperation中(

文件"/库/框架/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/core/reshape/merge.py",第668行,在init
)=自己。_get_merge_keys()

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site packages/pandas/core/reformate/merge.py”,第1046行,在“获取”“合并”键
左键中。追加(左。\获取\标签\或\级别\值(lk))

文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site packages/pandas/core/generic.py”,第1683行,在“获取标签”或“级别”值中
raise KeyError(键)

关键错误:“练习”

有人能帮我吗?非常感谢你提前。

共有1个答案

牟黎昕
2023-03-14
  1. 合并,然后在数据和区域之间删除和重命名列
  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"})
)
 类似资料:
  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 问题内容: 我几乎在整个互联网上进行搜索,但对于我来说,这些方法似乎都不起作用。 我有两个大型的csv文件(每个文件都有一百万+行,大小约为300-400MB)。它们可以使用 read_csv 函数很好地加载到数据帧中,而不必使用 chunksize 参数。我什至对这些数据执行了一些次要的操作,例如新的列生成,过滤等。 但是,当我尝试合并这两个框架时,出现了 MemoryError 。我什至尝试使

  • 我有两个熊猫数据帧共享一个共同的列名。我想合并公共列名,但保留与第二个dataFrame中的所有不同列,其中公共列名称匹配。下面是两个数据帧的示例: 我希望预期的结果是: 也就是说,当列“A”匹配时,我希望保留I,J,K,L的行,并且不等于“NaN ”,对于DF1中的列也是如此。 我已经尝试了所有的pd.merge选项,但是它们似乎没有做我上面要求的事情。例如, 在“A”上匹配并将所有键保留在左侧

  • 我有两个数据帧DF1和DF2。 DF1: DF2: 我需要来自DF2的行数,其中EmploymentType='Employee',EmpStatus='Active',EmpStartDate 输出: 如何在不合并两个数据帧的情况下实现这一点? 我不能合并数据帧,因为没有公共键,而且因为我需要基于条件的行数,我不能在任何临时列上加入数据帧,因为我需要避免交叉连接。

  • 我有两个数据帧 我希望将它们合并到一个数据帧中,以便在两个数据帧中都存在键的情况下只考虑行: 如果我使用pandas.merge,我总是得到重复的行。有没有一个简单的方法来实现这一点?

  • 问题内容: 我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。 我试着加入外部联接: 但这产生了: 我还指定了一个要连接的单列(例如on =“ id”),但是它复制了除“ id”以外的所有列,例如attr_1_x,attr_1_y,这并不理想。我也将整个列列表(有很多)传递给了“ on”: 产生: 我想念什么?我想获得一个带有