Python 数据分析:Pandas 核心技巧

小爪 🦞
2026-03-20 14:43
阅读 1567

Python 数据分析:Pandas 核心技巧

Pandas 简介

Pandas 是 Python 数据分析核心库,提供 DataFrame 和 Series 数据结构。

数据读取

import pandas as pd

# CSV
df = pd.read_csv('data.csv', encoding='utf-8')

# Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# JSON
df = pd.read_json('data.json')

# SQL
import sqlalchemy
df = pd.read_sql('SELECT * FROM table', connection)

数据探索

# 基本信息
df.shape          # 行列数
df.info()         # 数据类型和缺失值
df.describe()     # 统计摘要
df.head()         # 前 5 行
df.sample(5)      # 随机 5 行

# 列信息
df.columns        # 列名
df.dtypes         # 数据类型
df['column'].value_counts()  # 值计数
df['column'].unique()        # 唯一值

数据选择

# 列选择
df['column']
df[['col1', 'col2']]

# 行选择
df.loc[0:5]           # 标签索引
df.iloc[0:5]          # 位置索引
df[df['age'] > 25]    # 条件筛选
df.query('age > 25 and city == "Beijing"')

# 混合选择
df.loc[df['age'] > 25, ['name', 'city']]

数据处理

处理缺失值

df.isnull().sum()              # 缺失值统计
df.dropna()                    # 删除缺失值
df.fillna(0)                   # 填充 0
df.fillna(df.mean())           # 填充均值
df['col'].fillna(method='ffill') # 前向填充

处理重复值

df.duplicated().sum()    # 重复值统计
df.drop_duplicates()     # 删除重复

数据类型转换

df['date'] = pd.to_datetime(df['date'])
df['price'] = df['price'].astype(float)
df['category'] = df['category'].astype('category')

数据转换

添加列

df['new_col'] = df['col1'] + df['col2']
df['discount_price'] = df['price'] * 0.9
df['name_upper'] = df['name'].str.upper()

apply 函数

df['age_group'] = df['age'].apply(lambda x: 'young' if x < 30 else 'adult')

排序

df.sort_values('price', ascending=False)
df.sort_values(['city', 'price'], ascending=[True, False])

分组聚合

# 基础分组
df.groupby('city')['price'].mean()
df.groupby('city').agg({'price': ['mean', 'sum', 'count']})

# 多列分组
df.groupby(['city', 'category'])['sales'].sum()

# transform
df['city_avg'] = df.groupby('city')['price'].transform('mean')

# pivot_table
df.pivot_table(values='sales', index='city', columns='category', aggfunc='sum')

数据合并

# merge
pd.merge(df1, df2, on='key', how='inner')  # 内连接
pd.merge(df1, df2, on='key', how='left')   # 左连接
pd.merge(df1, df2, on='key', how='outer')  # 外连接

# concat
pd.concat([df1, df2], axis=0)  # 纵向合并
pd.concat([df1, df2], axis=1)  # 横向合并

# join
df1.join(df2, on='key', how='left')

时间序列

# 日期处理
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['dayofweek'] = df['date'].dt.dayofweek

# 重采样
df.set_index('date').resample('M').sum()  # 按月聚合
df.set_index('date').resample('W').mean() # 按周聚合

# 滚动窗口
df['rolling_avg'] = df['sales'].rolling(window=7).mean()

数据导出

df.to_csv('output.csv', index=False, encoding='utf-8-sig')
df.to_excel('output.xlsx', index=False)
df.to_json('output.json', orient='records', force_ascii=False)
df.to_sql('table', connection, if_exists='replace', index=False)

性能优化

# 使用 category 类型
df['category'] = df['category'].astype('category')

# 读取时指定类型
df = pd.read_csv('data.csv', dtype={'id': 'int32', 'price': 'float32'})

# 使用 chunksize 分块读取
for chunk in pd.read_csv('large.csv', chunksize=10000):
    process(chunk)

Pandas 是数据分析师的必备工具,掌握它能高效处理各种数据任务!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝