Python中的pandas库简介及其使用教程

  • Post category:Python

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()方法绘制时间序列销售数据的可视化图表。