Python Pandas 常用操作和案例

本文详细介绍了Pandas库在Python中进行数据处理和分析的各种功能,涵盖了数据读写、选择、清洗、转换、排序、合并、重塑、时间序列处理、多层索引、可视化、数据聚合、连接、缺失数据处理、文本操作、分桶、替换、迭代操作以及数据帧的链式调用等关键操作。
摘要由CSDN通过智能技术生成

Pandas 是一个强大的 Python 数据分析库,提供了一系列用于数据处理和分析的功能。以下是一些常用的 Pandas 操作及其案例:

1. 读取和写入数据

Pandas 支持从多种文件格式读取数据,如 CSV、Excel、JSON 等,并将数据写入这些格式的文件。

读取 CSV 文件:

import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('data.csv')

写入 CSV 文件:

# 将 DataFrame 写入 CSV 文件
df.to_csv('output.csv', index=False)

2. 数据选择和索引

可以使用多种方式选择和索引 DataFrame 中的数据。

选择列:

# 选择单列
prices = df['price']

# 选择多列
subset = df[['product', 'price']]

选择行:

# 通过行号选择行
row = df.iloc[0]

# 通过条件表达式选择行
filtered_rows = df[df['price'] > 10]

3. 数据清洗

Pandas 提供了多种方法用于数据清洗,包括处理缺失数据、重命名列等。

处理缺失数据:

# 填充缺失值
df.fillna(value=0, inplace=True)

# 删除包含缺失值的行
df.dropna(inplace=True)

重命名列:

# 重命名列
df.rename(columns={'old_name': 'new_name'}, inplace=True)

4. 数据转换

可以对数据进行转换,比如应用函数、聚合、合并等。

应用函数:

# 使用 apply() 应用函数到每个元素
df['price'] = df['price'].apply(lambda x: x * 1.1)

聚合:

# 按 'category' 列聚合,并计算每组的平均价格
category_avg = df.groupby('category')['price'].mean()

5. 排序

可以对数据进行排序。

按列排序:

# 按 'price' 列升序排序
df.sort_values(by='price', ascending=True, inplace=True)

6. 数据合并

可以合并多个 DataFrame。

合并(Join):

# 假设有另一个 DataFrame,包含产品的额外信息
df_info = pd.DataFrame({
    'product': ['apple', 'banana', 'cherry'],
    'info': ['info1', 'info2', 'info3']
})

# 按 'product' 列合并两个 DataFrame
df_merged = df.merge(df_info, on='product')

7. 数据重塑

可以重塑数据结构,比如使用透视表。

透视表:

# 创建透视表,查看每个产品的每种情况的销售总额
pivot_table = df.pivot_table(values='sales', index='product', columns='condition', aggfunc='sum')

8. 时间序列处理

Pandas 提供了强大的时间序列处理能力。

解析日期列:

# 将字符串列解析为 datetime 对象
df['date'] = pd.to_datetime(df['date_column'], format='%Y-%m-%d')

重采样时间序列数据:

# 将数据按月份重采样,并计算每月的平均值
monthly_average = df.resample('M', on='date').mean()

时间戳和时间周期转换:

# 将 datetime 对象转换为时间周期
df['period'] = df['date'].dt.to_period('M')

9. 多层索引(Hierarchical indexing)

Pandas 允许创建多层索引,也称为 MultiIndex,提供了对高维数据的灵活处理方式。

创建多层索引:

# 设置多层索引
df_multi_index = df.set_index(['category', 'product'])

多层索引的切片:

# 使用 loc 访问多层索引
subset = df_multi_index.loc[('Fruit', 'apple')]

10. 数据可视化

Pandas 集成了 Matplotlib,可以直接在 DataFrame 和 Series 上进行数据可视化。

数据可视化:

import matplotlib.pyplot as plt

# 绘制价格的直方图
df['price'].hist(bins=20)
plt.show()

11. 数据聚合和分组运算

除了基本的聚合函数,Pandas 还允许进行更复杂的分组运算。

自定义聚合:

# 自定义聚合函数,返回最大值减去最小值
def range_diff(series):
    return series.max() - series.min()

# 应用自定义聚合函数
df.groupby('category')['price'].agg(range_diff)

12. 连接和合并数据集

Pandas 允许使用多种方式连接数据集,包括纵向合并和横向合并。

横向合并(Concatenation):

# 假设有另一个 DataFrame,包含额外的数据行
df_additional = pd.DataFrame({
    'product': ['orange', 'watermelon'],
    'price': [0.30, 0.80]
})

# 纵向合并 DataFrame
df_concatenated = pd.concat([df, df_additional], ignore_index=True)

13. 数据透视和交叉表

可以使用数据透视表或交叉表进行数据摘要和分析。

交叉表(Crosstab):

# 创建交叉表,显示产品和条件组合的频数
pd.crosstab(df['product'], df['condition'])

14. 缺失数据插补

Pandas 提供了多种方法来插补缺失数据。

插补缺失数据:

# 使用前向填充插补缺失数据
df.fillna(method='ffill', inplace=True)

# 使用插值方法插补缺失数据
df.interpolate(method='linear', inplace=True)

15. 数据过滤

可以使用条件过滤来提取符合特定条件的数据。

使用 query 方法过滤:

# 使用 query 方法根据条件过滤数据
df_filtered = df.query('price > 10 & condition == "New"')

16. 分类数据处理

Pandas 提供了分类数据类型,它可以用来表示具有有限可能值的变量。

创建分类类型:

# 将列转换为分类类型
df['category'] = df['category'].astype('category')

排序分类数据:

# 对分类数据进行排序
df.sort_values(by='category', key=lambda col: col.cat.codes)

17. 文本数据处理

Pandas 提供了丰富的字符串操作方法,可以直接应用于字符串 Series 或 Index。

字符串操作:

# 调用字符串方法进行大写转换
df['product'] = df['product'].str.upper()

# 使用 contains() 查找包含特定字符串的行
df_filtered = df[df['product'].str.contains('APPLE')]

18. 数据分桶和离散化

对数值数据进行分桶或离散化,可以把连续变量转换为分类变量。

数据分桶(Binning):

# 使用 cut 将数据分为几个区间
df['price_bin'] = pd.cut(df['price'], bins=[0, 1, 3, 5], labels=['Low', 'Medium', 'High'])

19. 数据替换

在数据清洗过程中,有时需要替换 DataFrame 中的值。

替换数据:

# 替换特定的值
df.replace(to_replace='old_value', value='new_value', inplace=True)

20. 数据帧的迭代

虽然通常推荐使用矢量化操作,但有时可能需要迭代数据帧中的行或列。

迭代行:

# 迭代 DataFrame 的行
for index, row in df.iterrows():
    print(index, row['product'], row['price'])

21. 数据帧的变换

使用 transform 方法可以对组数据应用一个或多个函数。

变换数据:

# 对分组数据进行变换
df['discounted_price'] = df.groupby('category')['price'].transform(lambda x: x * 0.9)

22. 数据帧的逐元素操作

逐元素操作可用于 DataFrame 或 Series 的数据项。

逐元素操作:

# 使用 applymap 对 DataFrame 的每个元素应用函数
df = df.applymap(lambda x: x.lower() if isinstance(x, str) else x)

23. 数据帧的样式化

Pandas 允许给数据帧添加样式,这对于生成报告非常有用。

样式化数据帧:

# 使用样式化的数据帧
styled = df.style.format({'price': "${:.2f}"}) \
                .highlight_max(subset=['price'], color='yellow')

24. 数据帧的轴向操作

Pandas 允许在不同轴上执行操作,例如删除行或列。

轴向操作:

# 删除列
df.drop('price_bin', axis=1, inplace=True)

# 删除行
df.drop(index=[0, 1], inplace=True)

25. 数据帧的链式调用

Pandas 支持使用链式调用,这使得代码更易于阅读和编写。

链式调用:

# 使用链式调用进行多步操作
(df.assign(discounted_price=lambda x: x['price'] * 0.9)
   .query('discounted_price < 10')
   .sort_values('discounted_price'))

这些操作示例展示了 Pandas 的多样性和灵活性,无论是在数据预处理、清洗、转换、还是在数据分析阶段,Pandas 都是一个非常有用的工具,掌握这些操作有助于深入挖掘数据的潜力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值