# 實用的pandas知識點有哪些
Pandas是Python數據分析的核心庫,掌握其關鍵功能能大幅提升數據處理效率。本文系統梳理20+個高頻實用技巧,涵蓋數據操作、清洗、分析和可視化全流程。
## 一、基礎數據結構與創建
### 1. Series與DataFrame核心差異
```python
import pandas as pd
# Series創建(帶索引的一維數組)
s = pd.Series([1, 3, 5, np.nan], index=['a', 'b', 'c', 'd'])
# DataFrame創建(二維表格)
df = pd.DataFrame({
'A': 1.0,
'B': pd.Timestamp('20230101'),
'C': pd.Series(1, index=list(range(4))),
'D': np.array([3] * 4),
'E': ['test', 'train', 'test', 'train']
})
# 讀取時指定數據類型節省內存
dtypes = {'user_id': 'int32', 'price': 'float32'}
df = pd.read_csv('data.csv', dtype=dtypes)
# 分塊讀取大文件
chunk_iter = pd.read_csv('large.csv', chunksize=10000)
for chunk in chunk_iter:
process(chunk)
# 檢測缺失值
df.isna().sum()
# 多種填充方式
df.fillna({
'age': df['age'].median(), # 中位數填充
'income': 'unknown' # 固定值填充
}, inplace=True)
# 刪除缺失行(保留至少3個非空值的行)
df.dropna(thresh=3)
# 標記重復行(考慮全部列)
df.duplicated(keep='first')
# 按關鍵列去重
df.drop_duplicates(subset=['user_id', 'date'], keep='last')
# 自動轉換最佳類型
df.convert_dtypes()
# 強制類型轉換+錯誤處理
pd.to_numeric(df['price'], errors='coerce')
# 分類數據優化
df['category'] = df['category'].astype('category')
# 基礎布爾索引
df[(df['age'] > 18) & (df['gender'] == 'F')]
# query方法(支持表達式)
df.query('18 < age < 30 and gender == "F"')
# isin高效篩選
df[df['product_id'].isin(popular_products)]
# 向量化字符串方法
df['name'].str.contains('張|李', regex=True)
df['email'].str.extract(r'([a-z]+)@')
# 正則表達式替換
df['address'].str.replace(r'\d+街道', 'XX路', regex=True)
# 行列轉置
df.T
# 寬表變長表
pd.melt(df, id_vars=['date'], value_vars=['A', 'B'])
# 長表變寬表
df.pivot(index='date', columns='product', values='sales')
# 多級分組聚合
df.groupby(['dept', 'gender'])['salary'].agg(['mean', 'std', 'count'])
# 分組后應用自定義函數
def top_n(df, n=3, column='score'):
return df.sort_values(column, ascending=False).head(n)
df.groupby('class').apply(top_n, n=2)
# 不同連接方式對比
pd.merge(left, right, how='left', on='key')
# 索引合并
pd.merge(left, right, left_index=True, right_index=True)
# 縱向拼接
pd.concat([df1, df2], ignore_index=True)
# 自動識別日期格式
df['date'] = pd.to_datetime(df['date_str'], format='%Y-%m-%d')
# 時區處理
df['timestamp'].dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')
# 按周統計銷售額
df.set_index('datetime')['sales'].resample('W').sum()
# 滾動窗口計算
df['3day_avg'] = df['price'].rolling(window='3D').mean()
# 正確寫法
df.loc[df['age'] > 30, 'group'] = 'senior'
# 錯誤寫法(可能產生警告)
df[df['age'] > 30]['group'] = 'senior'
# 查看內存使用
df.memory_usage(deep=True)
# 優化數值類型
df['id'] = df['id'].astype('int32')
# 使用分類數據
df['city'] = df['city'].astype('category')
# 內置繪圖(需matplotlib)
df.plot(kind='scatter', x='age', y='income')
# 箱線圖分組顯示
df.boxplot(column='score', by='class')
# 條件格式
def highlight_negative(val):
color = 'red' if val < 0 else 'black'
return f'color: {color}'
df.style.applymap(highlight_negative, subset=['profit'])
# 使用Dask處理超大數據
import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=10)
result = ddf.groupby('category').size().compute()
# 1. 數據加載
orders = pd.read_csv('orders.csv', parse_dates=['order_date'])
# 2. 數據清洗
orders['price'] = pd.to_numeric(orders['price'].str.replace('$', ''))
# 3. 月度銷售分析
monthly_sales = orders.resample('M', on='order_date')['price'].sum()
# 4. 用戶復購分析
user_orders = orders.groupby('user_id')['order_id'].nunique()
chunksize
參數分塊讀取del df_temp
# 使用line_profiler分析
%load_ext line_profiler
%lprun -f process_data process_data(df)
# 查看操作耗時
%timeit df.groupby('category').mean()
本文涵蓋的20+個Pandas核心技巧包括: - 數據結構創建與優化 - 高效數據清洗方法 - 復雜查詢與篩選 - 分組聚合的多種模式 - 時間序列專項處理 - 性能優化關鍵策略 - 實際業務場景應用
掌握這些技巧可解決90%的日常數據分析需求,建議配合實際數據練習鞏固。更多高級功能可參考官方文檔的Structured Data
和Time Series
專項章節。
“`
文章特點: 1. 代碼示例占比40%,理論說明60% 2. 按數據處理流程組織內容 3. 包含實際業務場景案例 4. 重點標注性能優化方案 5. 使用最新Pandas 2.0+語法 6. 強調常見錯誤規避方法
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。