自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用 Pandas 實現(xiàn)數(shù)據(jù)合并的九個常用函數(shù)

開發(fā)
在數(shù)據(jù)分析中,數(shù)據(jù)合并是常見的需求。Pandas 提供了多種方法幫助我們高效完成這項任務(wù)!簡單來說,數(shù)據(jù)合并就像拼圖一樣,把不同的數(shù)據(jù)塊組合成一個完整的畫面。

一、Pandas數(shù)據(jù)合并基礎(chǔ)

在數(shù)據(jù)分析中,數(shù)據(jù)合并是常見的需求。Pandas 提供了多種方法幫助我們高效完成這項任務(wù)!簡單來說,數(shù)據(jù)合并就像拼圖一樣,把不同的數(shù)據(jù)塊組合成一個完整的畫面。

1. 數(shù)據(jù)合并的核心概念

Pandas 的數(shù)據(jù)合并主要分為 堆疊** 和 鍵連接 兩種方式。堆疊是將數(shù)據(jù)上下或左右拼接,而鍵連接則是通過共同的列或索引進(jìn)行匹配。

示例代碼:

import pandas as pd

# 創(chuàng)建兩個簡單的 DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

print("第一個 DataFrame:")
print(df1)
print("\n第二個 DataFrame:")
print(df2)

輸出結(jié)果:

第一個 DataFrame:
   A  B
0  1  3
1  2  4

第二個 DataFrame:
   A  B
0  5  7
1  6  8

接下來的章節(jié)會詳細(xì)講解如何用不同函數(shù)實現(xiàn)這些操作!別急,咱們一步步來~

二、使用concat函數(shù)進(jìn)行簡單數(shù)據(jù)堆疊

1. concat函數(shù)的基礎(chǔ)用法

Pandas 的 concat 函數(shù)可以輕松實現(xiàn)數(shù)據(jù)的堆疊操作。比如,你想把兩個表格上下或左右合并,concat 就能派上用場!來看個例子:

import pandas as pd

# 創(chuàng)建兩個簡單的 DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 使用 concat 堆疊數(shù)據(jù)(默認(rèn)按行堆疊)
result = pd.concat([df1, df2])
print(result)

輸出結(jié)果:

A  B
0  1  3
1  2  4
0  5  7
1  6  8

這里,pd.concat([df1, df2]) 把兩個表格按照行堆疊在一起,默認(rèn)保留索引。如果想重置索引,可以加上參數(shù) ignore_index=True。是不是超簡單?試試看吧!

三、利用append方法追加數(shù)據(jù)

1. append方法簡介

Pandas中的append方法可以輕松地將一個DataFrame追加到另一個DataFrame的末尾。這個方法特別適合處理小規(guī)模數(shù)據(jù)追加任務(wù)!不過需要注意,append在2023年后已被標(biāo)記為過時,推薦使用pandas.concat替代。但為了了解歷史用法,我們還是來學(xué)習(xí)一下吧!

來看個例子:

import pandas as pd

# 創(chuàng)建兩個DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 使用append方法
result = df1.append(df2, ignore_index=True)  # ignore_index=True重新生成索引
print(result)

輸出結(jié)果:

A  B
0  1  3
1  2  4
2  5  7
3  6  8

2. 注意事項

  • append不會修改原DataFrame,而是返回一個新的合并后的DataFrame。
  • 如果列名不一致,缺失值會以NaN填充。
  • 推薦在新項目中盡量使用concat代替append,因為它更靈活且性能更好!

四、merge函數(shù)實現(xiàn)基于鍵的合并

1. 使用 merge 函數(shù)完成基于鍵的數(shù)據(jù)合并

Pandas 的 merge 函數(shù)可以像數(shù)據(jù)庫一樣,根據(jù)指定的鍵將兩個數(shù)據(jù)集合并在一起。它支持內(nèi)連接、外連接、左連接和右連接,非常靈活!下面看一個例子:

import pandas as pd

# 創(chuàng)建兩個示例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})

# 使用 merge 函數(shù)進(jìn)行內(nèi)連接
merged_df = pd.merge(df1, df2, on='key', how='inner')
print(merged_df)

輸出結(jié)果:

key  value1  value2
0   B       2       4
1   C       3       5

這段代碼中,on='key' 表示以 key 列為合并依據(jù),how='inner' 表示只保留兩個表中共有的鍵值。是不是很直觀?你可以嘗試更換 how 參數(shù),比如 'outer' 或 'left',看看會發(fā)生什么變化!

五、join方法完成索引對齊的合并

1. 什么是join方法?

join 是 Pandas 中一個非常實用的方法,它可以根據(jù)索引自動對齊數(shù)據(jù)進(jìn)行合并。簡單來說,就是把兩個表格按照它們的“行標(biāo)簽”(索引)拼在一起。

舉個例子:假設(shè)有兩個表格,一個是學(xué)生的成績表,另一個是學(xué)生的個人信息表。如果它們都有相同的學(xué)號作為索引,用 join 就能輕松合并!

import pandas as pd

# 創(chuàng)建兩個示例 DataFrame
df1 = pd.DataFrame({'Score': [80, 90, 70]}, index=['Alice', 'Bob', 'Charlie'])
df2 = pd.DataFrame({'Age': [20, 22, 21]}, index=['Alice', 'Bob', 'Charlie'])

# 使用 join 方法合并
result = df1.join(df2)

print(result)

輸出結(jié)果:

Score  Age
Alice        80   20
Bob          90   22
Charlie      70   21

2. 為什么用 join?

相比其他方法,join 更加簡潔明了,特別適合以索引為基準(zhǔn)的合并場景。此外,它還支持多種參數(shù)設(shè)置,比如選擇 inner 或 outer 合并方式,靈活又強(qiáng)大!試試看吧,你會愛上它的!

六、update函數(shù)更新數(shù)據(jù)值

1. 使用 update 函數(shù)更新數(shù)據(jù)值

Pandas 的 update 函數(shù)可以用來更新一個 DataFrame 中的值,用另一個 DataFrame 的值進(jìn)行替換。如果目標(biāo) DataFrame 中有缺失值,可以用這個方法輕松填補(bǔ)!來看個例子:

import pandas as pd

# 創(chuàng)建兩個 DataFrame
df1 = pd.DataFrame({'A': [1, 2, None], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]})

print("原始數(shù)據(jù) df1:")
print(df1)

# 使用 update 更新 df1
df1.update(df2)
print("\n更新后的 df1:")
print(df1)

輸出結(jié)果:

原始數(shù)據(jù) df1:
     A  B
0  1.0  4
1  2.0  5
2  NaN  6

更新后的 df1:
     A  B
0  7.0  4
1  8.0  5
2  9.0  6

代碼解析:

  • df1.update(df2) 會將 df2 中的值覆蓋到 df1 中,但只更新那些非空的值。
  • 如果 df1 中有缺失值(如 NaN),它會被 df2 中對應(yīng)的值替換。
  • 這個方法非常適合處理需要動態(tài)更新的數(shù)據(jù)集!

七、combine_first處理缺失值的合并

1. 使用 combine_first 處理缺失值

在數(shù)據(jù)分析中,經(jīng)常會遇到兩個數(shù)據(jù)集有部分重疊但某些值缺失的情況。Pandas 提供了 combine_first 方法,可以用來填補(bǔ)這些缺失值!簡單來說,它會用另一個 DataFrame 的值來填充當(dāng)前 DataFrame 中的缺失值(NaN)。

舉個例子:

import pandas as pd

# 創(chuàng)建兩個帶有缺失值的 DataFrame
df1 = pd.DataFrame({'A': [1, None, 3], 'B': [None, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, None, 12]})

# 使用 combine_first 填補(bǔ)缺失值
result = df1.combine_first(df2)

print("原始 DataFrame 1:\n", df1)
print("原始 DataFrame 2:\n", df2)
print("合并結(jié)果:\n", result)

輸出結(jié)果:

原始 DataFrame 1:
      A    B
0   1.0  NaN
1   NaN  5.0
2   3.0  6.0
原始 DataFrame 2:
     A     B
0  7.0  10.0
1  8.0   NaN
2  9.0  12.0
合并結(jié)果:
     A     B
0  1.0  10.0
1  8.0   5.0
2  3.0   6.0

解釋:

  • 如果 df1 中某個值是 NaN,combine_first 會從 df2 中取對應(yīng)位置的值進(jìn)行填補(bǔ)。
  • 如果 df1 中已經(jīng)有值,則保留原值,不會被覆蓋。
  • 這個方法特別適合處理有部分重疊的數(shù)據(jù)集,幫你輕松搞定缺失值問題!

八、高級技巧:指示器與覆蓋選項的應(yīng)用

在數(shù)據(jù)合并中,高級選項如 indicator 和 overwrite 能讓合并更加靈活和清晰。下面我們來詳細(xì)講解!

1. 使用 indicator 參數(shù)標(biāo)記合并來源

indicator 參數(shù)會在合并后的數(shù)據(jù)框中添加一列,標(biāo)明每行數(shù)據(jù)來自哪個表。非常實用!看例子:

import pandas as pd

# 創(chuàng)建兩個示例數(shù)據(jù)框
df1 = pd.DataFrame({'key': ['A', 'B'], 'data1': [10, 20]})
df2 = pd.DataFrame({'key': ['B', 'C'], 'data2': [30, 40]})

# 合并并啟用 indicator
merged = pd.merge(df1, df2, on='key', how='outer', indicator=True)

print(merged)

輸出:

key  data1  data2      _merge
0    A   10.0    NaN   left_only
1    B   20.0   30.0        both
2    C    NaN   40.0  right_only

通過 _merge 列,我們可以清楚地知道每行數(shù)據(jù)的來源。

2. 使用 overwrite 參數(shù)控制值覆蓋

update 方法中的 overwrite 參數(shù)可以決定是否用新值替換舊值。例如:

# 創(chuàng)建兩個數(shù)據(jù)框
df_old = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df_new = pd.DataFrame({'A': [10, 20, 30], 'B': [None, None, None]}, index=[0, 1, 3])

# 使用 update 更新數(shù)據(jù),且不覆蓋空值
df_old.update(df_new, overwrite=False)

print(df_old)

輸出:

A    B
0  10.0  4.0
1  20.0  5.0
2   3.0  6.0

這里,overwrite=False 確保了空值不會覆蓋原有值。

這些高級技巧能讓數(shù)據(jù)合并更精準(zhǔn)、更高效!快試試吧!

九、實戰(zhàn)案例:多源銷售數(shù)據(jù)分析與整合

1. 銷售數(shù)據(jù)的初步加載與檢查

在實際工作中,我們經(jīng)常需要處理來自不同來源的銷售數(shù)據(jù)。Pandas 是完成這項任務(wù)的理想工具!首先,我們需要加載數(shù)據(jù)并進(jìn)行初步檢查。

import pandas as pd

# 加載兩個銷售數(shù)據(jù)表
sales1 = pd.read_csv("sales_data_1.csv")
sales2 = pd.read_csv("sales_data_2.csv")

# 查看數(shù)據(jù)結(jié)構(gòu)
print(sales1.head())
print(sales2.head())

這段代碼會幫助你快速了解數(shù)據(jù)的基本情況。

2. 使用 concat 堆疊多源數(shù)據(jù)

如果多個銷售數(shù)據(jù)表具有相同的列結(jié)構(gòu),可以直接用 concat 將它們堆疊在一起。

combined_sales = pd.concat([sales1, sales2], ignore_index=True)
print(combined_sales.head())

ignore_index=True 參數(shù)會讓新數(shù)據(jù)表重新生成索引,避免混亂。

3. 基于鍵的合并 (merge)

當(dāng)數(shù)據(jù)表之間存在關(guān)聯(lián)字段(如“產(chǎn)品ID”或“日期”)時,可以用 merge 函數(shù)將它們連接起來。

# 假設(shè) sales1 和 product_details 都有 "product_id" 列
product_details = pd.read_csv("product_details.csv")
merged_data = pd.merge(sales1, product_details, on="product_id", how="left")
print(merged_data.head())

這里我們使用了 how="left",表示以左側(cè)數(shù)據(jù)表為主,保留所有左側(cè)記錄。

4. 索引對齊的合并 (join)

如果數(shù)據(jù)表是以索引為基礎(chǔ)的,可以使用 join 方法。

# 假設(shè) sales1 的索引是日期,而 customer_info 的索引也是日期
customer_info = pd.read_csv("customer_info.csv", index_col="date")
joined_data = sales1.join(customer_info, how="inner")
print(joined_data.head())

how="inner" 表示只保留兩個表中都有的日期記錄。

5. 更新數(shù)據(jù)值 (update)

當(dāng)我們需要更新部分?jǐn)?shù)據(jù)時,update 是一個高效的選擇。

# 假設(shè) updated_prices 包含最新的價格信息
updated_prices = pd.DataFrame({"product_id": [1, 2], "price": [100, 200]})
sales1.set_index("product_id", inplace=True)
sales1.update(updated_prices.set_index("product_id"))
print(sales1.reset_index())

通過設(shè)置索引,我們可以精準(zhǔn)地更新對應(yīng)記錄。

6. 處理缺失值的合并 (combine_first)

當(dāng)兩個數(shù)據(jù)表存在部分重疊但有缺失值時,combine_first 可以派上用場。

# 假設(shè) sales1 和 sales2 都有部分缺失值
filled_data = sales1.combine_first(sales2)
print(filled_data.head())

它會優(yōu)先保留 sales1 的值,只有在缺失時才會從 sales2 中補(bǔ)充。

7. 指示器與覆蓋選項的應(yīng)用

高級合并中,指示器和覆蓋選項可以幫助我們更好地控制合并過程。

# 添加指示器,查看每條記錄來自哪個表
merged_with_indicator = pd.merge(sales1, sales2, on="product_id", how="outer", indicator=True)
print(merged_with_indicator["_merge"].value_counts())

# 設(shè)置覆蓋選項,避免重復(fù)列名沖突
merged_no_duplicates = pd.merge(sales1, sales2, on="product_id", suffixes=("_sales1", "_sales2"))
print(merged_no_duplicates.head())

這些技巧讓合并結(jié)果更加清晰明了。

通過以上步驟,你可以輕松完成多源銷售數(shù)據(jù)的整合與分析!

責(zé)任編輯:趙寧寧 來源: 手把手PythonAI編程
相關(guān)推薦

2021-07-13 10:02:52

Pandas函數(shù)Linux

2025-04-16 08:10:00

PandasPython數(shù)據(jù)分析

2022-04-25 14:27:05

Pandas函數(shù)數(shù)據(jù)

2023-11-23 06:51:50

PandasPython

2022-06-24 10:26:07

pandasExcelPython

2021-08-25 07:47:53

Pandas函數(shù)數(shù)據(jù)處理

2022-04-28 18:47:04

Pandas函數(shù)Python

2023-02-07 16:21:37

時間序列列數(shù)據(jù)集

2021-08-17 09:55:50

pandas 8indexPython

2020-03-10 08:55:50

PandasNumPy函數(shù)

2020-10-29 06:02:44

PythonPandasExcel

2020-07-06 14:00:01

Pandas連接參數(shù)

2020-12-14 14:16:34

Pandas數(shù)據(jù)預(yù)處理

2022-06-10 08:25:19

pandasoptionPython

2023-09-03 16:46:09

Pandas工具

2023-08-13 16:32:12

JavaScript

2022-08-27 15:03:43

Python損失函數(shù)算法

2020-06-04 10:49:53

Pandas字符串技巧

2023-08-11 11:19:52

數(shù)據(jù)集Merge函數(shù)

2024-10-18 17:03:16

Python地理空間數(shù)據(jù)處理
點贊
收藏

51CTO技術(shù)棧公眾號