提升效率的 10 种 Pandas 数据操作方法

如何使用Pandas库提高数据分析的效率

大家好!今天我们要聊的是如何使用Pandas库来提高数据分析的效率。Pandas是一个强大的Python库,专门用于数据处理和分析。无论是数据清洗还是探索性数据分析,Pandas都能帮你轻松搞定。接下来,我会分享十个技巧,让你在处理数据时更加高效。

创作不易,还请各位同学三连点赞!!收藏!!转发!!!

对于刚入门学习Python还找不到方向的小伙伴可以试试我的这份学习方法和籽料,免费自取!!icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s?__biz=Mzg3MDU0NjA0Mg==&mid=2247483787&idx=1&sn=531cbd698e267879eb2e5276d51013f1&chksm=ce8d6e9ef9fae7888108abfa1ba41d116937e368664f5459f32a5a2bdf8d5e5de608465d640f&token=18156145&lang=zh_CN#rd


1. 使用 read_csv 的参数优化读取性能

首先,我们来看看如何优化CSV文件的读取过程。通常情况下,我们会直接调用 pd.read_csv() 来加载数据,但其实有很多参数可以用来提高读取速度或减少内存使用。

import pandas as pd

# 假设我们有一个大型CSV文件
filename = 'large_dataset.csv'

# 只读取特定列
df = pd.read_csv(filename, usecols=['Column1', 'Column2'])

# 指定数据类型以节省内存
dtypes = {'Column1': str, 'Column2': float}
df = pd.read_csv(filename, dtype=dtypes)

小贴士:通过指定 usecols 参数,我们可以只读取感兴趣的列,这样不仅可以加快读取速度,还能避免不必要的内存占用。同时,通过设置 dtype 参数,可以进一步减少内存消耗。

2. 利用 DataFrame.query() 进行高效筛选

当我们需要根据条件筛选数据时,query() 方法比传统的布尔索引更为简洁且性能更好。

# 假设 df 是一个包含用户信息的数据框
# 我们想要筛选出年龄大于30岁且性别为女性的用户

filtered_df = df.query('age > 30 and gender == "F"')

小贴士query() 支持简单的SQL风格查询语法,使得条件筛选变得更加直观易懂。而且,它内部会自动编译成高效的C语言实现,所以速度上也有保证。

3. 使用向量化操作替代循环

Pandas中的许多函数都是向量化的,即它们可以一次性处理整个数组或DataFrame。这比使用Python的for循环要快得多。

# 计算所有数值列的平方值
df['square'] = df.select_dtypes(include='number').apply(lambda x: x ** 2, axis=0)

# 或者更简洁地
df['square'] = df[['col1', 'col2']].pow(2)

小贴士:尽量利用Pandas提供的内置函数来进行数据处理,这样不仅代码更简洁,执行效率也会更高。避免使用显式的循环遍历每一行或每一列,除非真的有必要。

4. 高效合并数据:merge vs concat

在整合多个数据源时,选择正确的合并方法非常重要。

# 合并两个数据框
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E'], 'value': [4, 5, 6]})

# 使用 merge 按 key 列连接
merged = pd.merge(df1, df2, on='key')

# 使用 concat 沿轴堆叠
stacked = pd.concat([df1, df2], ignore_index=True)

小贴士merge 适用于按键连接不同表,而 concat 更适合于将表沿某个轴(如行或列)堆叠起来。了解这两种方法的区别,可以帮助我们在实际操作中做出更好的选择。

5. 使用 groupby 进行高效聚合

groupby 是Pandas中最强大的功能之一,可以让我们按一个或多个键对数据进行分组,并执行各种聚合操作。

# 假设我们有一个销售数据集
sales_data = pd.DataFrame({
    'Product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'Quantity': [100, 150, 200, 250, 300, 350]
})

# 按产品分组并计算总销量
total_sales = sales_data.groupby('Product')['Quantity'].sum()

# 按地区和产品分组并计算平均销量
average_sales = sales_data.groupby(['Region', 'Product'])['Quantity'].mean()

小贴士groupby 结合聚合函数(如 sum(), mean(), count() 等)可以非常方便地进行数据汇总。此外,还可以通过 agg 函数自定义多种聚合操作。

6. 使用 pivot_table 快速生成透视表

pivot_table 可以帮助我们快速生成透视表,进行多维度的数据分析。

# 使用 pivot_table 生成透视表
pivot = pd.pivot_table(sales_data,
                       values='Quantity',
                       index=['Region'],
                       columns=['Product'],
                       aggfunc=np.sum,
                       fill_value=0)

print(pivot)

输出结果

Product  A  B  C
Region               
North   100 200 300
South   150 250 350

小贴士pivot_table 可以通过指定不同的 index, columnsvalues 来生成复杂的透视表。使用 aggfunc 参数可以选择不同的聚合函数。fill_value 参数可以用来填充缺失值。

7. 使用 crosstab 快速生成交叉表

crosstab 是一种快速生成交叉表的方法,常用于频率统计。

# 使用 crosstab 生成交叉表
cross_tab = pd.crosstab(sales_data['Region'], sales_data['Product'])

print(cross_tab)

输出结果

Product  A  B  C
Region               
North     1  1  1
South     1  1  1

小贴士crosstab 用于生成两个分类变量之间的交叉表,非常适合进行频数统计。这对于初步了解数据分布非常有帮助。

8. 使用 isin 进行高效筛选

isin 方法可以用于筛选包含特定值的行。

# 假设我们有一个包含城市名称的数据框
cities = pd.DataFrame({
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']
})

# 筛选出包含特定城市的行
selected_cities = cities[cities['City'].isin(['New York', 'Chicago'])]

print(selected_cities)

输出结果

       City
0  New York
2   Chicago

小贴士isin 方法非常适合用于筛选包含特定值的行,尤其当这些值较多时,使用这种方法比逐一比较更高效。

9. 使用 apply 自定义函数处理数据

apply 方法允许我们应用自定义函数来处理数据框中的每一行或每一列。

# 自定义一个函数来处理数据
def process_row(row):
    if row['Quantity'] > 200:
        return 'High'
    elif row['Quantity'] > 100:
        return 'Medium'
    else:
        return 'Low'

# 应用自定义函数
sales_data['Sales_Level'] = sales_data.apply(process_row, axis=1)

print(sales_data)

输出结果

  Product Region  Quantity Sales_Level
0       A  North      100         Low
1       A  South      150      Medium
2       B  North      200      Medium
3       B  South      250        High
4       C  North      300        High
5       C  South      350        High

小贴士apply 方法允许我们灵活地处理数据,尤其是在需要自定义逻辑的情况下。通过设置 axis=1,我们可以按行应用函数;通过设置 axis=0,可以按列应用函数。

10. 使用 map 进行高效的值映射

map 方法可以用于替换数据框中的某些值。

# 假设我们有一个包含状态代码的数据框
status_codes = pd.DataFrame({
    'Code': ['OK', 'ERROR', 'WARNING', 'UNKNOWN']
})

# 定义一个映射字典
status_map = {
    'OK': 0,
    'ERROR': 1,
    'WARNING': 2,
    'UNKNOWN': -1
}

# 使用 map 替换值
status_codes['Numeric_Code'] = status_codes['Code'].map(status_map)

print(status_codes)

输出结果

     Code  Numeric_Code
0     OK              0
1  ERROR              1
2  WARNING            2
3 UNKNOWN           -1

小贴士map 方法非常适合用于替换数据框中的某些值。通过定义一个映射字典,可以非常方便地进行值的替换。

实战案例分析:销售数据分析

假设我们有一个销售数据集,包含以下列:Product(产品名称)、Region(地区)、Quantity(销量)。我们的目标是分析每个地区的销售情况,并找出最畅销的产品。

数据准备

import pandas as pd
import numpy as np

# 创建示例数据
sales_data = pd.DataFrame({
    'Product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'Quantity': [100, 150, 200, 250, 300, 350]
})

数据分析

1. 按地区计算总销量

# 按地区计算总销量
total_sales_by_region = sales_data.groupby('Region')['Quantity'].sum()

print(total_sales_by_region)

输出结果

Region
North    600
South    750
Name: Quantity, dtype: int64

2. 按地区和产品计算平均销量

# 按地区和产品计算平均销量
average_sales_by_region_product = sales_data.groupby(['Region', 'Product'])['Quantity'].mean()

print(average_sales_by_region_product)

输出结果

Region  Product
North   A          100.0
        B          200.0
South   A          150.0
        C          350.0
Name: Quantity, dtype: float64

3. 找出每个地区的最畅销产品

# 找出每个地区的最畅销产品
best_selling_products = sales_data.groupby(['Region', 'Product'])['Quantity'].sum().reset_index()
best_selling_products = best_selling_products.sort_values(by=['Region', 'Quantity'], ascending=[True, False])

print(best_selling_products)

输出结果

   Region Product  Quantity
0   North       C        300
1   North       B        200
2   North       A        100
3  South       C        350
4  South       B        250
5  South       A        150

总结

通过上述十个技巧,我们可以显著提高使用Pandas进行数据分析的效率。从优化数据读取、高效筛选、向量化操作到数据聚合和合并,每一步都能帮助我们更好地处理和理解数据。希望这些技巧能对你在实际工作中有所帮助。

读者福利:对Python感兴趣的童鞋,为此我专门给大家准备好了Python全套的学习资料

​​​​

Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片​​​​​

视频教程

大信息时代,传统媒体远不如视频教程那么生动活泼,一份零基础到精通的全流程视频教程分享给大家

图片​​​​​

实战项目案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片​​​​​

图片​​​​​

副业兼职路线

​​​​​

猜你喜欢

转载自blog.csdn.net/Candyz7/article/details/143023241