wordpress 主題 mnews/網(wǎng)站內(nèi)容優(yōu)化關鍵詞布局
目錄
數(shù)據(jù)清洗和處理
1.處理缺失值
1.1 刪除缺失值:
1.2? 填充缺失值:
1.3 插值:
2 數(shù)據(jù)類型轉(zhuǎn)換
2.1 數(shù)據(jù)類型轉(zhuǎn)換
2.2 日期和時間的轉(zhuǎn)換:
2.3 分類數(shù)據(jù)的轉(zhuǎn)換:
2.4 自定義數(shù)據(jù)類型的轉(zhuǎn)換:
3 數(shù)據(jù)去重
4 數(shù)據(jù)合并和連接
數(shù)據(jù)清洗和處理
????????在數(shù)據(jù)清洗和處理方面,Pandas 提供了多種功能,包括處理缺失值、數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)去重以及數(shù)據(jù)合并和連接。以下是這些功能的詳細描述和示例:
1.處理缺失值
在 Pandas 中處理缺失值有多種方法,包括刪除缺失值、填充缺失值和插值。
1.1 刪除缺失值:
????????刪除缺失值是最簡單的方法,但有時會導致數(shù)據(jù)損失。您可以使用 dropna()
方法來刪除包含缺失值的行或列。
(1)刪除包含缺失值的行:
import pandas as pddata = {'A': [1, 2, None, 4],'B': [5, None, 7, 8]}
df = pd.DataFrame(data)# 刪除包含缺失值的行
df_cleaned = df.dropna()
print("刪除包含缺失值的行的結(jié)果:\n", df_cleaned)
(2)刪除包含缺失值的列:
# 刪除包含缺失值的列
df_cleaned_columns = df.dropna(axis=1)
print("刪除包含缺失值的列的結(jié)果:\n", df_cleaned_columns)
1.2? 填充缺失值:
????????填充缺失值是用特定值替代缺失值的方法。您可以使用 fillna()
方法來填充缺失值。
使用特定值填充缺失值:
# 使用特定值填充缺失值
df_filled = df.fillna(0) # 用 0 填充缺失值
print("使用特定值填充缺失值的結(jié)果:\n", df_filled)
1.3 插值:
????????插值是一種基于數(shù)據(jù)的方法,根據(jù)已知數(shù)據(jù)點的值來估計缺失值。Pandas 提供了多種插值方法,如線性插值、多項式插值等。
(1) 線性插值:
線性插值使用已知數(shù)據(jù)點之間的線性關系來估計缺失值。這是一種簡單而常見的插值方法。
import pandas as pddata = {'A': [1, 2, None, 4],'B': [5, None, 7, 8]}
df = pd.DataFrame(data)# 使用線性插值填充缺失值
df_interpolated = df.interpolate()
print("使用線性插值填充缺失值的結(jié)果:\n", df_interpolated)
?(2)?多項式插值:
多項式插值使用多項式函數(shù)來逼近已知數(shù)據(jù)點,以估計缺失值。您可以指定多項式的階數(shù)。
# 使用多項式插值填充缺失值(階數(shù)為2)
df_poly_interpolated = df.interpolate(method='polynomial', order=2)
print("使用多項式插值填充缺失值的結(jié)果:\n", df_poly_interpolated)
(3) 時間序列插值:
對于時間序列數(shù)據(jù),可以使用時間相關的插值方法,例如時間線性插值。
# 創(chuàng)建一個帶有時間索引的示例 DataFrame
data = {'A': [1, 2, None, 4],'B': [5, None, 7, 8]}
dates = pd.date_range(start='2021-01-01', periods=len(data))
df_time_series = pd.DataFrame(data, index=dates)# 使用時間線性插值填充缺失值
df_time_series_interpolated = df_time_series.interpolate(method='time')
print("使用時間線性插值填充缺失值的結(jié)果:\n", df_time_series_interpolated)
2 數(shù)據(jù)類型轉(zhuǎn)換
????????在 Pandas 中,數(shù)據(jù)類型轉(zhuǎn)換是將一列或多列的數(shù)據(jù)類型更改為其他數(shù)據(jù)類型的過程。數(shù)據(jù)類型的轉(zhuǎn)換可以幫助您適應特定的分析需求或確保數(shù)據(jù)的一致性。以下是一些常見的數(shù)據(jù)類型轉(zhuǎn)換操作以及示例:
2.1 數(shù)據(jù)類型轉(zhuǎn)換
- 使用
astype()
方法將一列的數(shù)據(jù)類型轉(zhuǎn)換為其他數(shù)據(jù)類型,如將整數(shù)列轉(zhuǎn)換為浮點數(shù)列。 - 使用
pd.to_numeric()
將列轉(zhuǎn)換為數(shù)值類型,例如整數(shù)或浮點數(shù)。
import pandas as pd# 創(chuàng)建示例 DataFrame
data = {'A': [1, 2, 3],'B': ['4', '5', '6']}
df = pd.DataFrame(data)# 將列 'A' 從整數(shù)轉(zhuǎn)換為浮點數(shù)
df['A'] = df['A'].astype(float)# 將列 'B' 從字符串轉(zhuǎn)換為整數(shù)
df['B'] = pd.to_numeric(df['B'])print(df)
DataFrame 中的數(shù)據(jù)類型轉(zhuǎn)換:
df.astype(dtype, copy=True, errors='raise')
dtype
: 要將數(shù)據(jù)類型轉(zhuǎn)換為的目標數(shù)據(jù)類型??梢允?NumPy 的數(shù)據(jù)類型(如np.float32
)或 Python 數(shù)據(jù)類型(如float
或int
)。copy
(可選,默認為 True):指定是否返回副本(True)或修改原始 DataFrame(False)。errors
(可選,默認為 'raise'):指定如何處理轉(zhuǎn)換錯誤。如果為 'raise',則會引發(fā)異常;如果為 'coerce',則將無法轉(zhuǎn)換的值設置為 NaN。
?Series 中的數(shù)據(jù)類型轉(zhuǎn)換:
s.astype(dtype, copy=True, errors='raise')
import pandas as pd# 創(chuàng)建一個示例 DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6]}
df = pd.DataFrame(data)# 將列 'A' 從整數(shù)轉(zhuǎn)換為浮點數(shù)
df['A'] = df['A'].astype(float)# 將列 'B' 從整數(shù)轉(zhuǎn)換為字符串
df['B'] = df['B'].astype(str)# 將列 'C' 從字符串轉(zhuǎn)換為整數(shù)并處理轉(zhuǎn)換錯誤(設置無法轉(zhuǎn)換的值為 NaN)
df['C'] = pd.to_numeric(df['C'], errors='coerce').astype(int)print(df.dtypes)
上述示例中,我們演示了如何使用
astype()
和pd.to_numeric()
進行數(shù)據(jù)類型的轉(zhuǎn)換,包括整數(shù)轉(zhuǎn)浮點數(shù)、整數(shù)轉(zhuǎn)字符串以及字符串轉(zhuǎn)整數(shù)并處理轉(zhuǎn)換錯誤的情況。?
2.2 日期和時間的轉(zhuǎn)換:
- 使用
pd.to_datetime()
將列轉(zhuǎn)換為日期時間類型,以便進行日期時間操作。
import pandas as pd# 創(chuàng)建示例 DataFrame
data = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03'],'Value': [10, 15, 20]}
df = pd.DataFrame(data)# 將 'Date' 列從字符串轉(zhuǎn)換為日期時間類型
df['Date'] = pd.to_datetime(df['Date'])print(df.dtypes)
2.3 分類數(shù)據(jù)的轉(zhuǎn)換:
- 使用
astype('category')
將列轉(zhuǎn)換為分類數(shù)據(jù)類型,適用于有限的離散值。
import pandas as pd# 創(chuàng)建示例 DataFrame
data = {'Category': ['A', 'B', 'A', 'C']}
df = pd.DataFrame(data)# 將 'Category' 列轉(zhuǎn)換為分類數(shù)據(jù)類型
df['Category'] = df['Category'].astype('category')print(df.dtypes)
2.4 自定義數(shù)據(jù)類型的轉(zhuǎn)換:
- 您可以使用自定義函數(shù)來將數(shù)據(jù)轉(zhuǎn)換為所需的數(shù)據(jù)類型,例如使用
apply()
方法。
import pandas as pd# 創(chuàng)建示例 DataFrame
data = {'Numbers': ['1', '2', '3', '4']}
df = pd.DataFrame(data)# 自定義函數(shù)將字符串轉(zhuǎn)換為整數(shù)并應用到 'Numbers' 列
df['Numbers'] = df['Numbers'].apply(lambda x: int(x))print(df.dtypes)
3 數(shù)據(jù)去重
在 Pandas 中,您可以使用 drop_duplicates()
方法來刪除重復的行。這個方法會返回一個新的 DataFrame,其中不包含重復的行。以下是如何在 Pandas 中執(zhí)行數(shù)據(jù)去重操作的示例:
import pandas as pd# 創(chuàng)建示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Alice', 'David', 'Bob'],'Age': [25, 30, 25, 40, 30]}
df = pd.DataFrame(data)# 執(zhí)行去重操作,基于所有列
df_no_duplicates = df.drop_duplicates()print("原始 DataFrame:")
print(df)print("\n去重后的 DataFrame:")
print(df_no_duplicates)
上述示例中,drop_duplicates()
方法將基于所有列的內(nèi)容來去重。如果要基于特定列進行去重,您可以通過傳遞 subset
參數(shù)來指定:
# 基于 'Name' 列進行去重
df_no_duplicates_name = df.drop_duplicates(subset=['Name'])print("基于 'Name' 列去重后的 DataFrame:")
print(df_no_duplicates_name)
您還可以使用 keep
參數(shù)來控制保留哪一個重復值。例如,keep='first'
(默認值)將保留第一個出現(xiàn)的值,而 keep='last'
將保留最后一個出現(xiàn)的值:
# 基于 'Name' 列進行去重,保留最后一個出現(xiàn)的值
df_keep_last = df.drop_duplicates(subset=['Name'], keep='last')print("基于 'Name' 列去重,保留最后一個出現(xiàn)的值的 DataFrame:")
print(df_keep_last)
這些示例演示了如何使用 Pandas 進行數(shù)據(jù)去重。根據(jù)您的需求,您可以選擇不同的去重方式。
4 數(shù)據(jù)合并和連接
????????在 Pandas 中,您可以使用不同的方法進行數(shù)據(jù)合并和連接,這通常用于將多個數(shù)據(jù)集組合在一起以進行分析。以下是一些常見的數(shù)據(jù)合并和連接操作以及示例:
4.1 pd.concat()
:
? 用于將多個 DataFrame 沿指定軸(通常是行軸或列軸)堆疊在一起。pd.concat()
默認在行軸(axis=0)上堆疊多個 DataFrame,也就是沿著行方向?qū)⑺鼈冞B接在一起。如果您想在列軸(axis=1)上堆疊多個 DataFrame,可以通過指定 axis
參數(shù)為1 來實現(xiàn)。
import pandas as pd# 創(chuàng)建兩個示例 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']})df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],'B': ['B3', 'B4', 'B5']})# 在行軸上堆疊兩個 DataFrame
result1 = pd.concat([df1, df2])# 在列軸上堆疊兩個 DataFrame
result2 = pd.concat([df1, df2], axis=1)print(result1,result2)
輸出:
4.2 pd.merge()
:
用于基于一個或多個鍵(列)將兩個 DataFrame 合并在一起,類似于 SQL 的 JOIN 操作。
import pandas as pd# 創(chuàng)建兩個示例 DataFrame
left = pd.DataFrame({'key': ['K0', 'K1', 'K2'],'value_left': ['V0', 'V1', 'V2']})right = pd.DataFrame({'key': ['K1', 'K2', 'K3'],'value_right': ['V3', 'V4', 'V5']})# 基于 'key' 列進行合并
result = pd.merge(left, right, on='key')print(result)
輸出
?
4.3 df.join()
:
????????用于將兩個 DataFrame 沿索引合并。
import pandas as pd# 創(chuàng)建兩個示例 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']}, index=['I0', 'I1', 'I2'])df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],'D': ['D0', 'D1', 'D2']}, index=['I1', 'I2', 'I3'])# 沿索引合并兩個 DataFrame
result = df1.join(df2)print(result)
輸出:
這些是一些常見的數(shù)據(jù)合并和連接操作示例。根據(jù)您的需求,您可以選擇適當?shù)姆椒▉砗喜⒑瓦B接數(shù)據(jù)集。 Pandas 提供了豐富的選項和參數(shù),以滿足不同的合并和連接需求。