一、Python集合基礎知識
Python集合是一組無序且元素唯一的數據結構,可使用大括弧{}或set()函數進行創建。由於集合不支持索引,因此無法使用下標訪問或更改集合中的元素。以下是對Python集合基本操作的演示:
# 創建一個集合
my_set = {1, 2, 3, 4, 5}
# 或
my_set = set([1, 2, 3, 4, 5])
# 向集合中添加元素
my_set.add(6)
# 從集合中刪除元素
my_set.remove(3)
# 檢查元素是否在集合中
4 in my_set
# 集合的長度
len(my_set)
# 遍歷集合
for el in my_set:
print(el)
二、Python集合去重原理
Python集合能夠高效地對數據進行去重,其原理是將重複的元素去掉,只留下獨特的元素。集合的元素必須是可哈希的,即不可變類型,例如字元串、元組、數字等都可以作為集合元素。
以下是使用Python集合進行列表去重的示例代碼:
duplicated_list = [1, 2, 2, 3, 3, 4, 4, 5, 5] unique_set = set(duplicated_list) unduplicated_list = list(unique_set) print(unduplicated_list)
上述代碼將一個有重複元素的列錶轉換為集合,再將集合轉換為列表,從而實現了去重操作。由於Python集合只保留唯一的元素,因此,轉換後的列表中只剩下了不重複的元素。
三、Python集合去重的高效性
Python集合去重極具高效性,因為它使用了哈希表,其時間複雜度為O(n)。而傳統的列表去重方法,例如使用的嵌套迭代,其時間複雜度為O(n^2)。Python集合的高效性在處理大型數據集時尤為突出。
以下代碼演示了Python集合對於大型複雜數據集的高效去重處理:
import time
# 創建一個包含1000000個整數的列表,其中包括重複元素
duplicated_list = list(range(1000000)) + [1, 2, 3]
# 傳統去重方法的處理時間
start = time.time()
unique_list = []
for el in duplicated_list:
if el not in unique_list:
unique_list.append(el)
print("傳統去重處理時間:", time.time() - start)
# 集合去重方法的處理時間
start = time.time()
unique_set = set(duplicated_list)
unduplicated_list = list(unique_set)
print("集合去重處理時間:", time.time() - start)
在上述代碼中,我們使用了傳統的列表去重方法和集合去重方法來處理包含了1000000個整數的列表,其中還包含了重複元素。結果表明,使用集合方法可以將處理時間從傳統方法的40s以上縮短到1s以下,效率提升了很多倍。
四、Python集合在數據清洗中的應用
Python集合去重的高效性使得它在數據清洗方面有著廣泛的應用。在數據分析過程中,我們往往會遇到存在重複記錄的數據,這時就可以使用Python集合對數據進行去重。除此之外,在進行數據拼接、數據聚合等方面,Python集合也有著廣泛的應用。
例如,我們可以使用Python集合快速對多個數據表中的記錄進行去重、合併,代碼示例如下:
import pandas as pd
# 讀取多個含有重複數據的表格
df1 = pd.read_csv("data1.csv")
df2 = pd.read_csv("data2.csv")
# 構建一個空集合,用於存放去重後的數據
unique_set = set()
# 遍歷每個表格,並將其中的數據加入到集合中
for df in [df1, df2]:
for i, row in df.iterrows():
unique_set.add(tuple(row))
# 將集合轉換回列表,並將其構建為一個表格
unique_df = pd.DataFrame(list(unique_set))
# 將表格保存為csv文件
unique_df.to_csv("unique_data.csv")
上述代碼可以避免在內存中創建大型的臨時列表,而是將數據逐一加入到集合中進行去重,隨後將處理後的數據轉換回列表再進行表格轉換。
五、Python集合的一些注意事項
在使用Python集合進行數據去重時,我們需要注意以下幾個問題:
1. 集合內元素必須是可哈希的。
Python集合內的元素必須是可哈希的,這可以確保集合內不會出現重複元素。可哈希的元素包括數字、字元串、元組等不可變類型,但列表、字典等可變類型是不可哈希的。
2. 集合本身是無序的。
Python集合是無序的,因此集合中元素的順序與添加元素的順序無關。無序的特性使得集合是一種高效的去重工具。
3. 分配給集合的內存空間可能會變化。
與列表和字典不同,Python集合分配給元素的內存空間是可變的。當集合中元素數量增加時,Python會自動重新分配更大的內存空間。這種動態內存分配的特性使得集合非常適合處理大型數據集,很大程度上避免了內存不足的問題。
六、總結
Python集合提供了一種高效、快速的去重方法,它使用哈希表的特性,可以在常數時間內完成去重操作。在處理大型、複雜的數據集時,集合去重方法具有特別高的效率。同時,我們需要注意集合內元素必須是可哈希的、集合是組元素的、不保證元素的順序,在使用時應該特別謹慎。
完整代碼實現如下:
"""
利用Python集合進行高效的數據去重
"""
# 創建一個集合
my_set = {1, 2, 3, 4, 5}
# 或
my_set = set([1, 2, 3, 4, 5])
# 向集合中添加元素
my_set.add(6)
# 從集合中刪除元素
my_set.remove(3)
# 檢查元素是否在集合中
4 in my_set
# 集合的長度
len(my_set)
# 遍歷集合
for el in my_set:
print(el)
# Python集合去重
duplicated_list = [1, 2, 2, 3, 3, 4, 4, 5, 5]
unique_set = set(duplicated_list)
unduplicated_list = list(unique_set)
print(unduplicated_list)
# 集合去重的高效性
import time
# 創建一個包含1000000個整數的列表,其中包括重複元素
duplicated_list = list(range(1000000)) + [1, 2, 3]
# 傳統去重方法的處理時間
start = time.time()
unique_list = []
for el in duplicated_list:
if el not in unique_list:
unique_list.append(el)
print("傳統去重處理時間:", time.time() - start)
# 集合去重方法的處理時間
start = time.time()
unique_set = set(duplicated_list)
unduplicated_list = list(unique_set)
print("集合去重處理時間:", time.time() - start)
# 使用Python集合進行數據清洗
import pandas as pd
# 讀取多個含有重複數據的表格
df1 = pd.read_csv("data1.csv")
df2 = pd.read_csv("data2.csv")
# 構建一個空集合,用於存放去重後的數據
unique_set = set()
# 遍歷每個表格,並將其中的數據加入到集合中
for df in [df1, df2]:
for i, row in df.iterrows():
unique_set.add(tuple(row))
# 將集合轉換回列表,並將其構建為一個表格
unique_df = pd.DataFrame(list(unique_set))
# 將表格保存為csv文件
unique_df.to_csv("unique_data.csv")
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/157991.html
微信掃一掃
支付寶掃一掃