??發(fā)現(xiàn)寶藏
前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。【點擊進入巨牛的人工智能學習網(wǎng)站】。
利用Python進行數(shù)據(jù)清洗與預(yù)處理:Pandas的高級用法
在數(shù)據(jù)科學和機器學習領(lǐng)域,數(shù)據(jù)清洗和預(yù)處理是至關(guān)重要的步驟。Pandas庫作為Python中最受歡迎的數(shù)據(jù)處理工具之一,提供了強大的功能來處理各種數(shù)據(jù)格式。本文將介紹Pandas的一些高級用法,幫助你更有效地進行數(shù)據(jù)清洗和預(yù)處理。
1. 數(shù)據(jù)清洗
數(shù)據(jù)清洗是指處理缺失值、異常值和重復值等問題,使數(shù)據(jù)集變得更加干凈和可靠。下面是一些Pandas的高級技術(shù),可以用來進行數(shù)據(jù)清洗:
處理缺失值
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)
data = {'A': [1, 2, None, 4],
'B': [5, None, 7, 8]}
df = pd.DataFrame(data)
# 填充缺失值
df.fillna(method='ffill', inplace=True) # 使用前向填充
print(df)
處理異常值
# 刪除異常值
threshold = 3
df = df[(df < threshold).all(axis=1)]
print(df)
處理重復值
# 刪除重復值
df.drop_duplicates(inplace=True)
print(df)
2. 數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理是為了使數(shù)據(jù)更適合模型訓練,包括特征縮放、特征編碼等。下面是一些Pandas的高級技術(shù),可用于數(shù)據(jù)預(yù)處理:
特征縮放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_features = scaler.fit_transform(df[['A', 'B']])
df[['A', 'B']] = scaled_features
print(df)
特征編碼
# 使用get_dummies進行獨熱編碼
df = pd.get_dummies(df, columns=['Categorical_Column'])
print(df)
時間序列處理
# 轉(zhuǎn)換日期格式
df['Date'] = pd.to_datetime(df['Date'])
# 提取年份
df['Year'] = df['Date'].dt.year
print(df)
通過這些高級用法,你可以更輕松地進行數(shù)據(jù)清洗和預(yù)處理,為后續(xù)的數(shù)據(jù)分析和建模工作打下良好的基礎(chǔ)。記得根據(jù)實際情況選擇合適的方法,以保證數(shù)據(jù)質(zhì)量和模型效果。
3. 多列操作與函數(shù)應(yīng)用
Pandas提供了強大的方法來對多列進行操作,并能夠輕松地應(yīng)用自定義函數(shù)。下面是一些相關(guān)技術(shù):
多列操作
# 添加新列
df['New_Column'] = df['A'] + df['B']
# 對多列進行統(tǒng)計計算
df['Sum'] = df[['A', 'B']].sum(axis=1)
print(df)
函數(shù)應(yīng)用
# 定義自定義函數(shù)
def custom_function(x):
return x * 2
# 應(yīng)用函數(shù)到某一列
df['New_Column'] = df['A'].apply(custom_function)
print(df)
4. 數(shù)據(jù)合并與拼接
在處理多個數(shù)據(jù)集時,經(jīng)常需要將它們合并或拼接起來。Pandas提供了便捷的方法來實現(xiàn)這一點:
數(shù)據(jù)合并
# 創(chuàng)建兩個示例數(shù)據(jù)集
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'B': ['B0', 'B1', 'B2', 'B3']})
# 合并數(shù)據(jù)集
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)
數(shù)據(jù)拼接
# 創(chuàng)建兩個示例數(shù)據(jù)集
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7']})
# 拼接數(shù)據(jù)集
concatenated_df = pd.concat([df1, df2])
print(concatenated_df)
通過這些技術(shù),你可以輕松地進行數(shù)據(jù)合并和拼接,實現(xiàn)更復雜的數(shù)據(jù)處理任務(wù)。
5. 數(shù)據(jù)分組與聚合
在數(shù)據(jù)分析中,常常需要對數(shù)據(jù)進行分組并進行聚合操作。Pandas提供了靈活的功能來實現(xiàn)這些操作:
數(shù)據(jù)分組
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Category': ['A', 'B', 'A', 'B', 'A'],
'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 按照Category列進行分組
grouped = df.groupby('Category')
# 對分組后的數(shù)據(jù)進行聚合操作
print(grouped.sum()) # 對每個分組求和
print(grouped.mean()) # 對每個分組求平均值
自定義聚合函數(shù)
# 定義自定義聚合函數(shù)
def custom_agg(x):
return max(x) - min(x)
# 應(yīng)用自定義聚合函數(shù)
print(grouped['Value'].agg(custom_agg)) # 對每個分組應(yīng)用自定義聚合函數(shù)
6. 數(shù)據(jù)透視表與交叉表
Pandas還提供了數(shù)據(jù)透視表和交叉表功能,可以方便地對數(shù)據(jù)進行匯總和分析:
數(shù)據(jù)透視表
# 創(chuàng)建示例數(shù)據(jù)集
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': ['small', 'large', 'large', 'small', 'small', 'large'],
'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)
# 創(chuàng)建數(shù)據(jù)透視表
pivot_table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
print(pivot_table)
交叉表
# 創(chuàng)建示例數(shù)據(jù)集
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': ['small', 'large', 'large', 'small', 'small', 'large']}
df = pd.DataFrame(data)
# 創(chuàng)建交叉表
cross_table = pd.crosstab(df['A'], df['B'])
print(cross_table)
通過這些功能,你可以輕松地對數(shù)據(jù)進行分組、聚合和分析,從而更深入地理解數(shù)據(jù)的特征和規(guī)律。
7. 缺失值處理的高級技巧
處理數(shù)據(jù)中的缺失值是數(shù)據(jù)清洗過程中的關(guān)鍵步驟之一。Pandas提供了一些高級技巧來處理缺失值:
插值填充
# 創(chuàng)建示例數(shù)據(jù)集
data = {'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, 8]}
df = pd.DataFrame(data)
# 使用插值填充缺失值
df.interpolate(inplace=True)
print(df)
使用模型填充
from sklearn.impute import KNNImputer
# 創(chuàng)建示例數(shù)據(jù)集
data = {'A': [1, 2, np.nan, 4],
'B': [5, np.nan, 7, 8]}
df = pd.DataFrame(data)
# 使用KNN模型填充缺失值
imputer = KNNImputer(n_neighbors=2)
df_filled = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_filled)
8. 文本數(shù)據(jù)處理
Pandas還提供了處理文本數(shù)據(jù)的功能,可以進行字符串操作、正則表達式匹配等:
字符串操作
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Text': ['foo', 'bar', 'baz']}
df = pd.DataFrame(data)
# 字符串方法操作
df['Text_Length'] = df['Text'].str.len() # 計算字符串長度
df['Text_Upper'] = df['Text'].str.upper() # 將字符串轉(zhuǎn)換為大寫
print(df)
正則表達式匹配
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Text': ['foo123', 'bar456', 'baz789']}
df = pd.DataFrame(data)
# 正則表達式匹配
df['Digits'] = df['Text'].str.extract('(\d+)', expand=False) # 提取數(shù)字
print(df)
通過這些技巧,你可以更加靈活地處理文本數(shù)據(jù),挖掘其中的信息。
9. 數(shù)據(jù)可視化
除了數(shù)據(jù)處理外,Pandas還提供了數(shù)據(jù)可視化的功能,可以幫助你更直觀地理解數(shù)據(jù):
繪制折線圖
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Date': pd.date_range(start='2022-01-01', periods=10),
'Value': np.random.randn(10)}
df = pd.DataFrame(data)
# 繪制折線圖
df.plot(x='Date', y='Value', title='Time Series Data', xlabel='Date', ylabel='Value')
plt.show()
繪制柱狀圖
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Category': ['A', 'B', 'C', 'D'],
'Value': [10, 20, 30, 40]}
df = pd.DataFrame(data)
# 繪制柱狀圖
df.plot(kind='bar', x='Category', y='Value', title='Bar Chart', xlabel='Category', ylabel='Value')
plt.show()
繪制箱線圖
# 創(chuàng)建示例數(shù)據(jù)集
data = {'Group': ['A', 'A', 'B', 'B'],
'Value': np.random.randn(100)}
df = pd.DataFrame(data)
# 繪制箱線圖
df.boxplot(by='Group', column='Value')
plt.title('Boxplot by Group')
plt.show()
通過數(shù)據(jù)可視化,你可以更加直觀地觀察數(shù)據(jù)的分布和趨勢,為進一步的分析和決策提供依據(jù)。
10. 并行處理
對于大規(guī)模數(shù)據(jù)集,Pandas提供了并行處理的功能,可以加速數(shù)據(jù)處理過程:
# 創(chuàng)建示例數(shù)據(jù)集
data = {'A': np.random.randn(1000),
'B': np.random.randn(1000),
'C': np.random.randn(1000)}
df = pd.DataFrame(data)
# 并行處理
result = df.apply(lambda x: x**2, axis=1, raw=True)
print(result)
通過設(shè)置raw=True
參數(shù),可以啟用并行處理,提高數(shù)據(jù)處理的效率。
11. 時間序列處理
Pandas提供了豐富的功能來處理時間序列數(shù)據(jù),包括日期索引、時間重采樣等:
創(chuàng)建日期索引
# 創(chuàng)建示例時間序列數(shù)據(jù)
dates = pd.date_range(start='2022-01-01', periods=5, freq='D')
data = {'Values': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data, index=dates)
print(df)
時間重采樣
# 按周重采樣
weekly_resampled = df.resample('W').mean()
print(weekly_resampled)
移動窗口統(tǒng)計
# 計算滾動平均值
rolling_mean = df['Values'].rolling(window=2).mean()
print(rolling_mean)
時間序列處理能夠幫助你更好地分析和預(yù)測時間相關(guān)的數(shù)據(jù),對于金融、氣象等領(lǐng)域的數(shù)據(jù)分析尤為重要。
12. 數(shù)據(jù)讀寫
Pandas還提供了豐富的功能來讀取和寫入各種數(shù)據(jù)格式:
讀取CSV文件
# 讀取CSV文件
df = pd.read_csv('data.csv')
print(df)
寫入CSV文件
# 寫入CSV文件
df.to_csv('output.csv', index=False)
Pandas支持讀寫多種數(shù)據(jù)格式,包括CSV、Excel、SQL數(shù)據(jù)庫等,使得數(shù)據(jù)的導入和導出變得更加便捷。
總結(jié)
總的來說,本文介紹了Pandas庫的一系列高級用法,涵蓋了數(shù)據(jù)清洗與預(yù)處理、多列操作與函數(shù)應(yīng)用、數(shù)據(jù)合并與拼接、數(shù)據(jù)分組與聚合、數(shù)據(jù)透視表與交叉表、缺失值處理的高級技巧、文本數(shù)據(jù)處理、數(shù)據(jù)可視化、并行處理、時間序列處理以及數(shù)據(jù)讀寫等方面。通過這些高級技巧和功能,讀者可以更加靈活地處理和分析各種類型的數(shù)據(jù),從而為數(shù)據(jù)科學和機器學習項目提供更加可靠的數(shù)據(jù)基礎(chǔ)和支持。無論是初學者還是有經(jīng)驗的數(shù)據(jù)科學家,都可以從本文中獲得啟發(fā)和幫助,進一步提高數(shù)據(jù)處理和分析的效率。因此,掌握Pandas庫的高級用法對于數(shù)據(jù)領(lǐng)域的從業(yè)者來說是非常重要的,希望本文對讀者有所啟發(fā),激發(fā)大家對數(shù)據(jù)處理和分析的興趣,歡迎繼續(xù)深入學習和實踐!文章來源:http://www.zghlxwxcb.cn/news/detail-845514.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-845514.html
到了這里,關(guān)于利用Python進行數(shù)據(jù)清洗與預(yù)處理:Pandas的高級用法【第147篇—Pandas的高級用法】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!