Why does Pandas inner join give ValueError: len(left_on) must equal the number of levels in the index of "right"?
Why does Pandas inner join give ValueError: len(left_on) must equal the number of levels in the index of "right"?
我正在尝试将 DataFrame A 内联到 DataFrame B,但 运行 出错了。
这是我的加入声明:
merged = DataFrameA.join(DataFrameB, on=['Code','Date'])
这是错误:
ValueError: len(left_on) must equal the number of levels in the index of "right"
我不确定列顺序是否重要(它们不是真的 "ordered" 是吗?),但为了以防万一,DataFrames 的组织方式如下:
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)
我需要更正我的加入声明吗?还是有另一种更好的方法来获取这两个 DataFrame 的交集(或内部连接)?
如果您不加入索引,请使用 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')
相同的方法适用于其他类型的连接:
OuterJoin
pd.merge(df1, df2, on='filename', how='outer')
左加入
pd.merge(df1, df2, on='filename', how='left')
右加入
pd.merge(df1, df2, on='filename', how='right')
我正在尝试将 DataFrame A 内联到 DataFrame B,但 运行 出错了。
这是我的加入声明:
merged = DataFrameA.join(DataFrameB, on=['Code','Date'])
这是错误:
ValueError: len(left_on) must equal the number of levels in the index of "right"
我不确定列顺序是否重要(它们不是真的 "ordered" 是吗?),但为了以防万一,DataFrames 的组织方式如下:
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)
我需要更正我的加入声明吗?还是有另一种更好的方法来获取这两个 DataFrame 的交集(或内部连接)?
如果您不加入索引,请使用 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')
相同的方法适用于其他类型的连接:
OuterJoin
pd.merge(df1, df2, on='filename', how='outer')
左加入
pd.merge(df1, df2, on='filename', how='left')
右加入
pd.merge(df1, df2, on='filename', how='right')