为什么Pandas内部连接会给出ValueError:len(left_on)必须等于索引“right”中的级别数?

2024-10-06 08:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将数据帧A内部连接到数据帧B,但遇到错误。

这是我的加入声明:

merged = DataFrameA.join(DataFrameB, on=['Code','Date'])

这里有个错误:

ValueError: len(left_on) must equal the number of levels in the index of "right"

我不确定列顺序是否重要(它们不是真正的“顺序”,是吗?),但以防万一,数据帧的组织方式如下:

DataFrameA:  Code, Date, ColA, ColB, ColC, ..., ColG, ColH (shape: 80514, 8 - no index)
DataFrameB:  Date, Code, Col1, Col2, Col3, ..., Col15, Col16 (shape: 859, 16 - no index)

我需要更正联接语句吗?或者是否有其他更好的方法来获得这两个数据帧的交集(或内部连接)?


Tags: ofthe数据no声明dateindex顺序
2条回答

如果不加入索引,请使用merge

merged = pd.merge(DataFrameA,DataFrameB, on=['Code','Date'])

跟进以下问题:

下面是一个可重复的示例:

import pandas as pd
# create some timestamps for date column
i = pd.to_datetime(pd.date_range('20140601',periods=2))

#create two dataframes to merge
df = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col1': [10,100]})
df2 = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col2': [10,200]})

#merge on columns (default join is inner)
pd.merge(df, df2, on =['code','date'])

结果是:

    code    col1    date    col2
0   ABC     10      2014-06-01  10
1   EFG     100     2014-06-02  200

运行此代码时会发生什么情况?

这是另一种执行join的方法。与验证的答案不同,这是适用于所有其他类型联接的更一般的答案。

内部连接

inner join也可以通过在how中显式地提到它来执行:

pd.merge(df1, df2, on='filename', how='inner')

同样的方法也适用于其他类型的连接:

外部连接

pd.merge(df1, df2, on='filename', how='outer')

左连接

pd.merge(df1, df2, on='filename', how='left')

右连接

pd.merge(df1, df2, on='filename', how='right')

相关问题 更多 >