Pandas是Python数据分析的核心库,它提供了两种主要数据结构:
Series:一维带标签数组
DataFrame:二维表格型数据结构(类似Excel表格)
import pandas as pd
# 创建示例DataFrame
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
# 读取CSV文件
df = pd.read_csv('data.csv')
# 读取Excel文件
df = pd.read_excel('data.xlsx')
# 读取JSON数据
df = pd.read_json('data.json')
df.head() # 查看前5行
df.tail(3) # 查看后3行
df.info() # 查看数据概览
df.describe() # 数值列统计信息
# 检测缺失值
df.isnull().sum()
# 填充缺失值
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
# 删除缺失行
df.dropna(subset=['城市'], inplace=True)
# 检测重复行
df.duplicated().sum()
# 删除重复行
df.drop_duplicates(inplace=True)
# 转换为字符串
df['年龄'] = df['年龄'].astype(str)
# 转换为日期
df['日期'] = pd.to_datetime(df['日期'])
# 单条件筛选
young_people = df[df['年龄'] < 30]
# 多条件筛选
bj_young = df[(df['城市'] == '北京') & (df['年龄'] < 30)]
# 单列排序
df.sort_values('年龄', ascending=False)
# 多列排序
df.sort_values(['城市', '年龄'], ascending=[True, False])
# 按城市分组计算平均年龄
df.groupby('城市')['年龄'].mean()
# 多维度分组
df.groupby(['城市', '性别'])['年龄'].agg(['mean', 'count', 'max'])
# 创建透视表
pd.pivot_table(df,
index='城市',
columns='性别',
values='年龄',
aggfunc='mean')
# 纵向合并(相同列名)
pd.concat([df1, df2])
# 横向合并(相同行索引)
pd.concat([df1, df2], axis=1)
# 类似SQL的JOIN操作
pd.merge(df1, df2, on='用户ID', how='left')
# 不推荐写法(使用循环)
for i in range(len(df)):
df.loc[i, '年龄段'] = '青年' if df.loc[i, '年龄'] < 30 else '中年'
# 推荐写法(向量化操作)
df['年龄段'] = np.where(df['年龄'] < 30, '青年', '中年')
# 自定义函数处理数据
def age_group(age):
if age < 20: return '少年'
elif age < 40: return '青年'
else: return '中年'
df['年龄段'] = df['年龄'].apply(age_group)
Q:如何提高Pandas处理大数据的速度?
A:可以尝试:
使用df.itertuples()
替代df.iterrows()
考虑使用Dask库处理超大数据
将对象类型转换为category类型节省内存
Q:怎样处理日期数据?
A:Pandas有强大的日期处理功能:
df['日期'].dt.year # 提取年份
df['日期'].dt.month # 提取月份
df['日期'].dt.day_name() # 获取星期名称
Q:如何导出处理后的数据?
A:与读取方法对应:
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='结果')
Pandas是数据分析师日常工作中最常用的工具之一。通过掌握这些核心功能,你已经能够处理80%以上的常见数据分析任务。记住:数据分析的关键不在于记住所有方法,而在于理解数据背后的业务逻辑。多加练习,你会越来越熟练!