十個(gè)案例快速入門(mén) Pandas
作者:Python數(shù)智工坊
通過(guò)以下十個(gè)案例的實(shí)踐演練,可以掌握Pandas的核心數(shù)據(jù)處理功能。建議使用Jupyter Notebook進(jìn)行分步調(diào)試,結(jié)合.shape和.head()方法隨時(shí)驗(yàn)證操作結(jié)果。?
本文通過(guò)十個(gè)常用的案例介紹,讓大家盡可能最快的熟悉pandas的使用,本文的十個(gè)案例包含詳細(xì)的代碼和注釋,涵蓋了pandas常用的一些使用場(chǎng)景。
環(huán)境要求:Python 3.8+,安裝Pandas庫(kù)
pip install pandas
示例1:創(chuàng)建/讀取數(shù)據(jù)
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)(字典格式)
data = {
'姓名': ['張三', '李四', '王五', '趙六'],
'年齡': [25, 30, 28, 35],
'城市': ['北京', '上海', '廣州', '深圳'],
'得分': [85.5, 90.0, 78.5, 92.3]
}
df = pd.DataFrame(data) # 將字典轉(zhuǎn)換為DataFrame
# 讀取外部文件(注:需要文件路徑)
# df = pd.read_csv('data.csv') # 讀取CSV
# df = pd.read_excel('data.xlsx') # 讀取Excel
print("數(shù)據(jù)集:")
print(df)
示例2:查看數(shù)據(jù)基本信息
# 顯示前3行數(shù)據(jù)
print(df.head(3)) # 默認(rèn)顯示5行
# 顯示維度信息
print("數(shù)據(jù)維度(行數(shù),列數(shù)):", df.shape)
# 顯示各字段數(shù)據(jù)類型
print("數(shù)據(jù)類型:\n", df.dtypes)
# 顯示統(tǒng)計(jì)摘要(僅數(shù)值列)
print("統(tǒng)計(jì)摘要:\n", df.describe())
示例3:數(shù)據(jù)篩選
# 篩選特定列
name_score = df[['姓名', '得分']] # 雙括號(hào)返回DataFrame
# 按行篩選(年齡大于28)
age_filter = df[df['年齡'] > 28] # 布爾篩選
# 多條件篩選(年齡>25且城市為北京)
complex_filter = df[(df['年齡'] > 25) & (df['城市'] == '北京')]
# 使用isin進(jìn)行篩選
city_filter = df[df['城市'].isin(['北京', '廣州'])]
示例4:處理缺失值
# 生成含缺失值的數(shù)據(jù)
import numpy as np
data_with_nan = {
'A': [1, np.nan, 3],
'B': [4, 5, np.nan]
}
nan_df = pd.DataFrame(data_with_nan)
# 刪除包含缺失值的行
clean_df = nan_df.dropna() # 默認(rèn)axis=0:刪除行
# 填充缺失值
filled_df = nan_df.fillna(0) # 用0填充
filled_mean = nan_df.fillna(nan_df.mean()) # 使用列均值填充
示例5:數(shù)據(jù)排序
# 按年齡升序排列
sorted_age = df.sort_values('年齡') # ascending=True默認(rèn)升序
# 多重排序(先按得分降序,再按年齡升序)
multi_sorted = df.sort_values(['得分', '年齡'], ascending=[False, True])
示例6:數(shù)據(jù)分組聚合
# 按城市分組計(jì)算平均年齡
grouped = df.groupby('城市')['年齡'].mean()
# 多維度聚合(同時(shí)計(jì)算年齡均值和得分總和)
agg_result = df.groupby('城市').agg({
'年齡': 'mean',
'得分': 'sum'
})
示例7:數(shù)據(jù)合并
# 創(chuàng)建新數(shù)據(jù)集
new_data = {
'姓名': ['錢七', '孫八'],
'年齡': [29, 31],
'城市': ['杭州', '成都'],
'得分': [88.0, 84.5]
}
df_new = pd.DataFrame(new_data)
# 縱向合并(追加記錄)
combined = pd.concat([df, df_new], axis=0) # axis=0縱向合并
# 橫向合并(需共同字段)
other_info = pd.DataFrame({
'姓名': ['張三', '李四'],
'部門(mén)': ['技術(shù)部', '市場(chǎng)部']
})
merged = pd.merge(df, other_info, on='姓名')
示例8:時(shí)間序列處理
# 創(chuàng)建時(shí)間序列數(shù)據(jù)
date_rng = pd.date_range(start='2023-01-01', periods=5, freq='D')
time_df = pd.DataFrame({
'date': date_rng,
'value': [100, 115, 95, 110, 120]
})
# 設(shè)置日期索引
time_df.set_index('date', inplace=True)
# 重采樣(按周計(jì)算均值)
weekly_mean = time_df.resample('W').mean()
示例9:應(yīng)用函數(shù)轉(zhuǎn)換
# 定義年齡分段函數(shù)
def age_group(age):
if age < 30:
return'青年'
elif age < 40:
return'中年'
else:
return'資深'
# 添加新列
df['年齡段'] = df['年齡'].apply(age_group)
# 使用lambda表達(dá)式轉(zhuǎn)換得分
df['得分等級(jí)'] = df['得分'].apply(lambda x: '優(yōu)'if x >=90else'良')
示例10:保存處理結(jié)果
# 保存為CSV文件(不要保存索引)
df.to_csv('processed_data.csv', index=False)
# 保存為Excel文件
df.to_excel('processed_data.xlsx', index=False)
# 保存為JSON格式
df.to_json('processed_data.json', orient='records')
注意事項(xiàng)
- 文件操作時(shí)注意路徑的正確性。
- 使用inplace=True參數(shù)時(shí)操作會(huì)直接修改原數(shù)據(jù)。
- 合并數(shù)據(jù)時(shí)注意索引對(duì)齊問(wèn)題。
- 分組操作后需使用聚合函數(shù)才能輸出有意義結(jié)果。
通過(guò)這10個(gè)案例的實(shí)踐演練,可以掌握Pandas的核心數(shù)據(jù)處理功能。建議使用Jupyter Notebook進(jìn)行分步調(diào)試,結(jié)合.shape和.head()方法隨時(shí)驗(yàn)證操作結(jié)果。
責(zé)任編輯:趙寧寧
來(lái)源:
Python數(shù)智工坊