【问题标题】:Pandas merge giving error "Buffer has wrong number of dimensions (expected 1, got 2)"Pandas 合并给出错误“缓冲区的维数错误(预期为 1,得到 2)”
【发布时间】:2015-01-19 19:43:06
【问题描述】:

我正在尝试进行 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')

是否可以像这样合并三列?这里的合并调用有什么问题吗?

【问题讨论】:

  • 您的c 数据框中似乎有两个相同的列"term_school_id"...删除一个或重命名以避免重复名称。

标签: python pandas dataframe data-structures


【解决方案1】:

如 cmets 中所述,您有一个 dupe 列:

【讨论】:

  • 如何删除重复的列..?
  • @user1017373 按索引删除)
  • @Rocketq 您的建议应该包含在答案中,因为这是解决问题的实际方法;)
【解决方案2】:

要解决欺骗列的问题,您可以使用 duplicated 和 smth 删除欺骗列。喜欢:

c = c[~c.columns.duplicated(keep='first')]

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

请记住,在这种情况下您必须调整合并部分

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      如果没有重复的列,则:

      升级您的pandas 并确保它是1.1.0 以上的版本。 在旧版本的 pandas 中广播值存在一些问题。我遇到了同样的问题,但它在 google colab 中运行良好,这就是我发现旧版本存在问题的原因,因为 colab 总是使用任何库的最新版本。

      要升级 pandas,请使用:

      pip install --upgrade pandas
      

      【讨论】:

      • 欢迎来到 SO!您是否知道这个问题已经 6 岁了(并且有几个答案,包括一个已接受的答案)?您确定只需升级即可解决重复问题吗?
      • @Timus 谢谢:)...我已经提到,如果没有重复的列,这可能会起作用。
      • 但是骗子才是问题所在……?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2011-12-28
      • 2022-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多