我尝试使用两列连接两个Pandas数据框:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
但出现以下错误:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
你知道怎么做才是正确的吗?谢谢!
5条答案
按热度按时间voj3qocg1#
试试这个
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
left_on:标签、列表或数组形式的字段名称,用于在左侧DataFrame中进行联接。可以是DataFrame长度的向量或向量列表,以使用特定向量而不是列作为联接键
right_on:标签或列表,或数组形式的字段名称,用于在右侧DataFrame或每个left_on文档的向量/向量列表中加入
a1o7rhls2#
这里的问题是,通过使用撇号,你将传递的值设置为一个字符串,而事实上,正如@Shijo在文档中所声明的,函数期望的是一个标签或列表,而不是一个字符串!如果列表包含了传递给左 Dataframe 和右 Dataframe 的每个列的名称,那么每个column-name * 必须 * 单独地位于撇号内。根据以上所述,我们可以理解为什么这是不正确的:
而这是使用函数的正确方法:
s71maibg3#
另一种方法是:
exdqitrt4#
您可以使用以下简短易懂的语句:
41zrol4v5#
这对我来说很有用,对于n个文件xls
all_reports_paths包含一个数组,其中包含每个文件的所有路径
对于所有报告路径中的:
(pd.reada,跳过行=X,跳过页脚=X))
df_glob = pd. Dataframe (列=列)
对于df中的 Dataframe :
Dataframe ( Dataframe ),轴=0)
finally df_glob包含所有数据