【发布时间】:2020-09-01 14:40:50
【问题描述】:
我正在尝试将多个 csv 文件合并在一起。它们都有一些共同点,分别是:
CU_NUMBER CYCLE_DATE JOIN_NUMBER CU_NAME PhysicalAddressLine1 PhysicalAddressCity PhysicalAddressStateCode
这些列的右侧将是所有 csv 文件中感兴趣的各个列。现在,其中一些 csv 文件将具有我仍想合并的不同感兴趣的列。此外,某些文件可能没有相同的 CU_NUMBER、CU_NAME、PhysicalAddressLine1、PhysicalAddressCity、PhysicalAddressStateCode。
这是我想做的一个例子。假设我有一个数据框
和另一个数据框
合并后我想要这样的东西:
棘手的部分是所有 csv 文件都有各种感兴趣的列,我想看看是否有一种好方法可以以这种方式合并所有这些列,而无需手动指定我想要的每一列。我总共有 20 个 csv 文件,我想以这种方式合并为一个。
我目前所拥有的:
我尝试过这样的事情:
df_concat1 = pd.concat([ df13[['CU_NUMBER','CYCLE_DATE',
'JOIN_NUMBER',
'PhysicalAddressLine1','PhysicalAddressCity',
'PhysicalAddressStateCode','(CECL) Allowance for Credit Losses on Loans and Leases']]
], axis = 0)
new_df1 = df12.merge(df_concat1, how='left', on=['CU_NUMBER','CYCLE_DATE', 'JOIN_NUMBER',
'CU_NAME', 'PhysicalAddressLine1',
'PhysicalAddressCity', 'PhysicalAddressStateCode'])
但我收到此错误:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-13-c2b139ce1777> in <module>
6 new_df1 = df12.merge(df_concat1, how='left', on=['CU_NUMBER','CYCLE_DATE', 'JOIN_NUMBER',
7 'CU_NAME', 'PhysicalAddressLine1',
----> 8 'PhysicalAddressCity', 'PhysicalAddressStateCode'])
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in merge(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
7295 copy=copy,
7296 indicator=indicator,
-> 7297 validate=validate,
7298 )
7299
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
84 copy=copy,
85 indicator=indicator,
---> 86 validate=validate,
87 )
88 return op.get_result()
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)
625 self.right_join_keys,
626 self.join_names,
--> 627 ) = self._get_merge_keys()
628
629 # validate the merge keys dtypes. We may need to coerce
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in _get_merge_keys(self)
981 if not is_rkey(rk):
982 if rk is not None:
--> 983 right_keys.append(right._get_label_or_level_values(rk))
984 else:
985 # work-around for merge_asof(right_index=True)
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis)
1690 values = self.axes[axis].get_level_values(key)._values
1691 else:
-> 1692 raise KeyError(key)
1693
1694 # Check for duplicates
KeyError: 'CU_NAME'
我不确定为什么会收到此错误。我想要的是将所有感兴趣的列合并到一个文件中,如果有感兴趣的列是该文件独有的,那么它将只是一个新列。如果有重复的列,那么我只想在有意义的情况下追加新行。
【问题讨论】:
-
首先请告诉我们您希望通过什么逻辑合并感兴趣的列?您希望在新的 DF 中使用哪些。是否有重复的列(除了前 7 个),您想如何处理它们?你都尝试了些什么。你能用
Dataframe.merge来解决你的问题吗? -
@Joooeey 当然让我澄清一下。
-
@Joooeey 我试图添加一些澄清,但我不确定我是否表达得足够好。
-
在黑暗中拍摄的总左场:鉴于它是一个 KeyError,您确定源数据中的某个 CU_NAME 字段在列名中没有杂散空间吗?