1. 為什麼需要合併數據?
在現代的大數據世界,很少能在一個檔案中找到所有所需資訊。 通常數據分散在多個表格和檔案中,為了進行完整的分析,必須將它們合併。 例如,你可能有每個月銷售數據的單獨檔案。 為了分析整體趨勢,需將這些數據合併成一個表格。
此外,合併數據有助於:
- 節省手動合併報表的時間。
- 減少因手動數據搬移產生的錯誤。
- 自動化數據分析流程。
2. 合併數據的方法
數據拼接(Concatenation)
垂直或水平的數據合併稱為數據拼接。 咱們先從一個簡單的例子開始:我們有兩個DataFrame需要合併。
import pandas as pd
# 創建兩個結構類似的 DataFrame
data1 = {
'Product': ['Apples', 'Bananas'],
'Sales': [100, 150]
}
data2 = {
'Product': ['Cherries', 'Dates'],
'Sales': [75, 200]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 垂直拼接(添加行)
combined = pd.concat([df1, df2], ignore_index=True)
print(combined)
結果我們得到一個整合的DataFrame,它包含了兩個數據源的所有行。 留意參數ignore_index=True,它會重置最終DataFrame的索引。
使用merge方法合併數據
當你需要基於公共列(如id或Product)合併數據時, 可以用merge方法。這就像給數據安排一個約會——它們需要有一些共同點才能進行結合。
# 創建數據示例
sales_data = {
'Product': ['Apples', 'Bananas', 'Cherries'],
'Sales': [100, 150, 75]
}
price_data = {
'Product': ['Apples', 'Bananas', 'Dates'],
'Price': [1.2, 0.8, 3.0]
}
sales_df = pd.DataFrame(sales_data)
price_df = pd.DataFrame(price_data)
# 基於列 'Product' 將 DataFrame 合併
merged_df = pd.merge(sales_df, price_df, on='Product', how='inner')
print(merged_df)
雖然我們擁有每個商品的資訊,merge僅返回在關鍵列Product中匹配的行。
來看看不同的合併類型:
inner(默認):僅返回同時存在於兩個DataFrame中的行。outer:返回所有行,缺失值用NaN填充。left:返回左側DataFrame的所有行,以及右側的匹配行。right:返回右側DataFrame的所有行,以及左側的匹配行。
合併多個工作表中的數據
現在,我們溫習了如何用 pandas 合併數據, 咱們來實際操作一下,把同一 Excel 文件中多個工作表的數據合併起來。
# 讀取包含多個工作表的 Excel 文件
excel_file = pd.ExcelFile('sales_data.xlsx')
# 所有工作表的名稱列表
sheet_names = excel_file.sheet_names
# 從每個工作表中讀取數據到單獨的 DataFrame,再放到列表中
dataframes = [pd.read_excel(excel_file, sheet_name=sheet_name) for sheet_name in sheet_names]
# 垂直拼接所有的 DataFrame
all_sales_data = pd.concat(dataframes, ignore_index=True)
print(all_sales_data)
這裡我們從Excel中的每個工作表讀入數據到單獨的DataFrame,然後把它們合併成一個。 強大吧?
合併多個文件中的數據
在現實中,你可能會遇到數據分布在多個文件中的情況。 來看看如何自動化這個合併過程。
import glob
# 文件路徑
file_path = r'data/sales_*.xlsx'
# 獲取所有符合模式的文件列表
files = glob.glob(file_path)
# 從每個文件讀取數據到單獨的 DataFrame,再放到列表中
dataframes = [pd.read_excel(file) for file in files]
# 垂直拼接所有的 DataFrame
all_files_data = pd.concat(dataframes, ignore_index=True)
print(all_files_data)
我們使用glob庫來獲取符合指定模式的文件列表, 然後合併每個文件中的數據到一個DataFrame中。
3. 真實應用示例
為商業分析合併數據
假設你是一名分析師,正在處理每月銷售數據的單獨檔案。 使用上述技巧,你可以輕鬆合併數據來分析年度趨勢並得出相關結論。
報表自動化
通過自動化數據合併,你可以設置腳本來收集來自不同來源的資訊, 並自動生成每日、每週或每月報表。
處理來自不同來源的數據
你的數據可能來自不同的系統,每個來源都提供部分資訊。 使用 pandas 你可以將它們組合起來,獲取完整的畫面,例如將客戶數據和他們的購買記錄合併。
4. 常見錯誤及修正方法
常見錯誤之一是合併的DataFrame中的列名稱不匹配。 確保你用來合併數據的列名稱一致,如有需要可以在merge方法中使用參數 left_on 和 right_on。
有時候合併後的數據可能包含缺失值。 使用fillna方法填充值或dropna方法刪除缺失值來解決這個問題。
如果你的數據包含重複項,concat方法可能會導致得到的DataFrame比預期的更長。 在這種情況下,可以使用drop_duplicates方法進行清理。
現在我們解析了 pandas 中數據合併的各種方法和技術,你已擁有處理數據自動化和分析的工具。 善加利用這些知識吧!
GO TO FULL VERSION