Python中的pandas库简介及其使用教程
简介
Pandas是一个开源的数据分析库,主要用于数据预处理、清洗、分析和建模等任务。它基于NumPy库,可以快速、简便的处理结构化数据,例如表格形式的数据,如CSV文件、SQL数据库或者Excel文件等。Pandas库提供了数据操作所需的高级函数和API,支持时间序列、多维数组和面板数据等操作。Pandas库通常与Matplotlib、Seaborn等数据可视化库结合使用。
Pandas的安装和导入
Pandas库可以通过pip或Anaconda安装。一般推荐使用Anaconda,因为它内置了所有常用的数据分析和科学计算的库。
使用pip安装:
pip install pandas
使用Anaconda安装:
conda install pandas
导入Pandas:
import pandas as pd
Pandas的基本数据结构
Pandas库提供了两种主要的数据结构:Series和DataFrame。
Series
Series是一维数组结构,可以保存任何数据类型,包括整数、浮点数、字符串、Python对象等。它通常使用整数索引,类似于Python中的列表,但是Series具有更多的功能和能力。
创建Series:
import pandas as pd
s = pd.Series([1, 3, 5, 7, 9])
print(s)
会得到如下结果:
0 1
1 3
2 5
3 7
4 9
dtype: int64
DataFrame
DataFrame是一个二维数据结构,可以保存不同的数据类型,包括数值、字符串、布尔值、Python对象等。它类似于电子表格或SQL表格,具有行和列的索引。DataFrame通常是从文件或数据库中载入数据,或者手动创建。
创建DataFrame:
import pandas as pd
data = {'name': ['Lucy', 'Tom', 'David', 'Susan'],
'age': [24, 25, 27, 29],
'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)
会得到如下结果:
name age gender
0 Lucy 24 F
1 Tom 25 M
2 David 27 M
3 Susan 29 F
Pandas的基本操作
数据查看和筛选
使用head()方法查看前几条数据:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
使用tail()方法查看后几条数据:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.tail())
使用loc[]方法按照index和column的标签进行筛选:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.loc[0:4, ['name', 'age']])
数据清洗和预处理
使用dropna()方法删除缺失值:
import pandas as pd
df = pd.read_csv('data.csv')
df = df.dropna()
print(df)
使用fillna()方法将缺失值替换:
import pandas as pd
df = pd.read_csv('data.csv')
df = df.fillna(value=0)
print(df)
数据聚合和统计
使用groupby()方法进行数据聚合:
import pandas as pd
df = pd.read_csv('data.csv')
df = df.groupby(['gender']).mean()
print(df)
使用describe()方法进行数据统计:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.describe())
示例说明
示例1:分类汇总和统计柱状图
一个电商网站拥有几千万的用户数据库,需要对购物行为进行统计和分析,了解用户购买偏好和使用行为等信息。我们需要对购物订单进行分类汇总,并绘制柱状图。假设我们的数据表格结构如下:
订单编号 | 用户编号 | 购买商品编号 | 购买日期 | 付款方式 | 订单金额 |
---|---|---|---|---|---|
000001 | 001 | 001, 002, 003 | 2022-02-01 | 支付宝 | 100 |
000002 | 002 | 002 | 2022-02-01 | 微信支付 | 50 |
000003 | 003 | 003, 004 | 2022-02-02 | 信用卡 | 200 |
000004 | 001 | 004 | 2022-02-02 | 支付宝 | 80 |
000005 | 004 | 003, 004 | 2022-02-03 | 支付宝 | 150 |
… | … | … | … | … | … |
我们使用Pandas进行数据读入、处理和分析:
import pandas as pd
import matplotlib.pyplot as plt
# 读入数据文件
df = pd.read_csv('orders.csv')
# 分类汇总
df = df.groupby(['购买日期', '付款方式']).agg({'订单金额': ['count', 'sum']}).reset_index()
df.columns = df.columns.get_level_values(0)
# 绘制柱状图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots(figsize=(8, 5))
barWidth = 0.4
ax.bar(df['购买日期'], df['订单金额_sum'], width=barWidth)
ax.bar(df['购买日期']+barWidth, df['订单金额_count'], width=barWidth, color='orange')
ax.set_xticklabels(df['购买日期'].unique())
ax.set_xlabel('购买日期')
ax.set_ylabel('订单金额')
ax.legend(['订单总额', '订单数量'], loc='upper left')
plt.show()
其中,我们使用groupby()方法按照购买日期和付款方式进行分类汇总,统计每一天每一种付款方式的总订单金额和订单数量。接着,我们使用柱状图展示每一天的订单总额和订单数量。
示例2:时间序列数据可视化
假设我们有一份季度销售数据的表格,包含每个季度的销售收入数据。我们需要将这些数据通过时间序列进行可视化,以便比较每个季度的销售情况。假设我们的数据表格结构如下:
季度 | 销售收入 |
---|---|
Q1 | 5000 |
Q2 | 8000 |
Q3 | 6000 |
Q4 | 7000 |
我们使用Pandas进行数据读入、处理和分析:
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
# 读入数据文件
df = pd.read_csv('sales.csv')
df['quarter'] = df['quarter'].apply(lambda x: datetime.strptime(x, '%b').strftime('%m'))
# 构建时间序列
time_series = pd.date_range(start='1/1/2022', end='12/31/2022', freq='QS')
# 生成DataFrame
df_time = pd.DataFrame({'quarter': time_series, 'value': 0})
# 合并DataFrame
df = df_time.merge(df, on='quarter', how='left').fillna(0)
# 绘制可视化图表
plt.plot(df['quarter'], df['value'])
plt.xlabel('季度')
plt.ylabel('销售收入')
plt.title('季度销售数据')
plt.show()
其中,我们使用Pandas将季度转化为月份格式,然后使用date_range()方法构建从2022年1月1日到2022年12月31日的季度时间序列。接着,我们生成空的DataFrame,并将时间序列和销售数据进行合并,以此生成完整的季度销售数据。最后,我们使用plt.plot()方法绘制时间序列销售数据的可视化图表。