簡體   English   中英

在Python中合並多個csv文件形成一個csv文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM