[英]Merging a number of csv files to form one csv file in Python
我正在嘗試將多個 csv 文件合並在一起。 它們都有一些共同點,它們是:
CU_NUMBER CYCLE_DATE JOIN_NUMBER CU_NAME PhysicalAddressLine1 PhysicalAddressCity PhysicalAddressStateCode
這些列的右側將是所有 csv 文件中感興趣的各個列。 現在,其中一些 csv 文件將具有我仍想合並的不同感興趣的列。 此外,某些文件可能沒有相同的 CU_NUMBER、CU_NAME、PhysicalAddressLine1、PhysicalAddressCity、PhysicalAddressStateCode。
這是我想做的一個例子。 假設我有一個 dataframe
和另一個數據框
合並后我想要這樣的東西:
棘手的部分是所有 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'
我不確定為什么會收到此錯誤。 我想要的是將所有感興趣的列合並到一個文件中,如果有感興趣的列是該文件獨有的,那么它將只是一個新列。 如果有重復的列,那么如果有意義的話,我只想 append 新行。
您看到的錯誤是因為您的df_concat1
不包含名稱為'CU_NAME'
的列或索引。 合並時,通過on=
傳遞的所有名稱都必須存在於兩個數據幀中。
所以,是的, DataFrame.merge
是你的朋友, DataFrame.concat
在這里沒用。 如果您確定每個 dataframe 中都存在公共列,則可以在循環中合並:
common_columns = [...]
df_m, *df_others = my_dataframes
for df in df_others:
# using 'outer' makes sure we keep all rows from all files
df_m = df_m.merge(df, how='outer', on=common_columns)
# do work with df_m
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.