Pandas合并出错:“缓冲区维度错误(期望为1,实际为2)”

35
我正在尝试进行pandas合并,但在尝试运行时出现了标题中的错误。我使用3列进行匹配,而之前只使用2列进行类似的合并,它可以正常工作。
df = pd.merge(df, c, how="left",
        left_on=["section_term_ps_id", "section_school_id", "state"],
        right_on=["term_ps_id", "term_school_id", "state"])

两个数据框的列

df:

Index([u'section_ps_id', u'section_school_id', u'section_course_number', u'secti
on_term_ps_id', u'section_staff_ps_id', u'section_number', u'section_expression'
, u'section_grade_level', u'state', u'sections_id', u'course_ps_id', u'course_sc
hool_id', u'course_number', u'course_schd_dept', u'courses_id', u'school_ps_id',
 u'course_school_id', u'school_name', u'school_abbr', u'school_low_grade', u'sch
ool_high_grade', u'school_alt_school_number', u'school_state', u'school_phone',
u'school_fax', u'school_principal', u'school_principal_phone', u'school_principa
l_email', u'school_asst_principal', u'school_asst_principal_phone', u'school_ass
t_principal_email'], dtype='object')

c:

Index([u'term_ps_id', u'term_school_id', u'term_portion',
u'term_start_date', u' term_end_date', u'term_abbreviation',
u'term_name', u'state', u'terms_id', u'sch ool_ps_id',
u'term_school_id', u'school_name', u'school_abbr', u'school_low_grad
e', u'school_high_grade', u'school_alt_school_number',
u'school_state', u'school
_phone', u'school_fax', u'school_principal', u'school_principal_phone', u'school
_principal_email', u'school_asst_principal', u'school_asst_principal_phone', u's chool_asst_principal_email'],
dtype='object')
可以像这样在三列上合并吗?在合并调用中有什么问题吗?

这样合并三列是可行的吗?在这里进行合并调用是否存在任何问题?


6
你的 c 数据框中似乎有两列名字一样的 "term_school_id" 列... 要么删掉其中一列,要么重命名以避免重复。 - Primer
5个回答

45

如评论中所提到的,您有一个重复的列:

输入图像说明


如何删除重复的列? - Alva James
1
@user1017373 按索引删除它。 - Rocketq
4
@Rocketq的建议应该被包含在答案中,因为这是实际解决问题的方法 ;) - braunmagrin

5

这将从数据框中删除重复的列。

df = df[list(df.columns[~df.columns.duplicated()])]

3
为解决重复列的问题,您可以使用duplicated并执行以下操作来删除重复列: duplicated
c = c[~c.columns.duplicated(keep='first')]

或者通过为任一DataFrame中的列添加额外的字符,例如: c.columns=[c.columns[i]+str(i) for i in range(len(c.columns))]

请注意,在这种情况下,必须调整合并部分。


1

我遇到了类似的问题,虽然这个问题很旧,但可能会帮助一些人。 我们有一个使用Python库0.25的Python代码,它运行良好,但是当将代码导入到带有Python库1.3.2的Pod时,它开始抛出以下错误:

ERROR - Error in line 34 ValueError Buffer has wrong number of dimensions (expected 1, got 2)\nTraceback (most recent call last)

将版本降级至0.25可以解决此问题,或者升级代码也可解决。

1
如果没有重复的列,则:
升级您的 pandas 并确保其版本在1.1.0以上。 在旧版本的 pandas 中广播值存在一些问题。我也遇到了同样的问题,但在 Google Colab 中运行良好,这就是我发现它是旧版本问题的原因,因为 Colab 总是使用任何库的最新版本。
要升级 pandas,请使用:
pip install --upgrade pandas

欢迎来到SO!您是否知道这个问题已经存在将近6年了(并且有几个答案,包括一个被接受的答案)?您确定重复的问题只是通过升级来解决吗? - Timus
@Timus 谢谢 :)... 我已经提到,如果没有重复的列,这可能会起作用。 - Aman Saini
但是重复项是问题的根源吗...? - Timus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接