Pandas数据处理——数据计算的高效方法

目录

前言

一、导入pandas库

二、导入CSV或者xlsx文件

三、数据合并

1.mean()函数

2.用pandas创建数据表:

四、 描述性统计信息

五、基本统计量计算

1.平均值

2.对所有的列进行计数汇总

3.按城市对id字段进行计数

4.对两个字段进行汇总计数

5.对city字段进行汇总,并分别计算prince的合计和均值

六、数据筛选与过滤

1.条件筛选

2.缺失值处理

七、数据分组与聚合

1.分组(groupby)

2.聚合(aggregate)

八、数据合并与连接

1.合并(merge)

2.连接(concat)

九、数据透视与交叉表

1.透视表(pivot_table)

2.交叉表(crosstab)

总结


前言

在数据科学的世界中,Pandas无疑是一个强大的工具,它让数据处理和分析变得轻松而高效。Pandas提供了丰富的功能,用于加载、处理、清洗、转换和分析数据。本文将深入探讨Pandas中用于数据计算的一些关键方法,帮助你更好地利用这个强大的库。

一、导入pandas

    一般都会用到numpy库,所以我们先导入备用:

import numpy as np
import pandas as pd

二、导入CSV或者xlsx文件

df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))

三、数据合并

Pandas数据合并是指将两个或多个Pandas数据结构(主要是DataFrame)基于某个或多个共同字段(键)进行连接,从而生成一个新的数据结构,这个新的数据集将包含来自原始数据集的所有相关信息,并根据合并的条件进行组织。在Pandas提供了多种方法来合并数据,其中最常用的包括concat()merge()join()等。

1.mean()函数

例如你想要计算数学这门课的平均分,你可以使用mean()函数来计算。

mean()函数的格式为

import pandas as pd
a = pd.read_csv("读取的表")
a2 = a["表中要求的数据"].mean()
print("a2")
import pandas as pd
data = pd.read_csv("成绩表.csv")
average_math = data["数学"].mean()
print("数学平均分为:", average_math)

输出的成绩:

数学平均分为: 85.6

2.用pandas创建数据表:

df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006], 
 "date":pd.date_range('20130102', periods=6),
  "city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
 "age":[23,44,54,32,34,32],
 "category":['100-A','100-B','110-A','110-C','210-A','130-F'],
  "price":[1200,np.nan,2133,5433,np.nan,4432]},
  columns =['id','date','city','category','age','price'])

四、 描述性统计信息

使用describe()函数可以获取多个数值型列的描述性统计信息,包括计数、平均值、标准差、最小值、25%分位数、中位数、75%分位数和最大值等。例如,我们可以这样获取age列的描述性统计信息:

description = df['age'].describe()
print("年龄的描述性统计信息:")
print(description)

五、基本统计量计算

1.平均值

使用mean()函数可以计算数值型列的平均值。例如,假设我们有一个名为data的DataFrame,其中包含一个名为age的列,我们可以这样计算平均年龄:

import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],

        'age': [25, 30, 35]}

df = pd.DataFrame(data)
average_age = df['age'].mean()print("平均年龄为:", average_age)

 输出结果为:

平均年龄为: 30.0

2.对所有的列进行计数汇总

df_inner.groupby('city').count()



3.按城市对id字段进行计数

df_inner.groupby('city').count()


4.对两个字段进行汇总计数

df_inner.groupby(['city','size'])['id'].count()


5.对city字段进行汇总,并分别计算prince的合计和均值

df_inner.groupby(['city','size'])['id'].count()


        

六、数据筛选与过滤

1.条件筛选

使用布尔索引可以根据条件筛选出符合条件的数据。

例如,我们可以筛选出年龄大于等于30岁的数据:

       

filtered_data = df[df['age'] >= 30]print("年龄大于等于30岁的数据:")
print(filtered_data)

输出结果为:

年龄大于等于30岁的数据:      name  age

1      Bob   30

2  Charlie   35

   

2.缺失值处理

使用dropna()函数可以删除包含缺失值的行或列。例如,我们可以删除包含缺失值的行:

    

df_no_missing = df.dropna()print("删除缺失值后的数据:")
print(df_no_missing)

输出结果为:

删除缺失值后的数据:      name  age

0    Alice  25.0

1      Bob  30.0

2  Charlie  35.0

    

七、数据分组与聚合

1.分组(groupby)

使用groupby()函数可以根据某个或多个列的值对数据进行分组。例如,我们可以按照名字的长度对数据进行分组,并计算每个分组的平均年龄:

        

grouped_data = df.groupby(df['name'].str.len())['age'].mean()print("按名字长度分组的平均年龄:")print(grouped_data)

输出结果为:

按名字长度分组的平均年龄:name3    30.05    27.57    32.5Name: age, dtype: float64

2.聚合(aggregate)

使用agg()函数可以对分组后的数据进行聚合操作。例如,我们可以计算每个分组的最大年龄和最小年龄:

        

aggregated_data = df.groupby(df['name'].str.len())['age'].agg(['min', 'max'])print("按名字长度分组的最小和最大年龄:")print(aggregated_data)

输出结果为:

按名字长度分组的最小和最大年龄:

         min  maxname              3       25   355       25   307       30   35

八、数据合并与连接

1.合并(merge)

使用merge()函数可以将两个DataFrame根据某个或多个共同的列进行合并。例如,我们有两个DataFrame,一个是学生信息,另一个是成绩信息,我们可以这样合并它们:

       

students = {'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie']}

scores = {'id': [1, 2, 3], 'math': [90, 80, 70]}

students_df = pd.DataFrame(students)

scores_df = pd.DataFrame(scores)



merged_data = pd.merge(students_df, scores_df, on='id')print("合并后的数据:")print(merged_data)

输出结果为:

合并后的数据:

   id     name  math

0   1    Alice    90

1   2      Bob    80

2   3  Charlie    70

       

  1. objs︰ 一个序列或系列、 综合或面板对象的映射。如果字典中传递,将作为键参数,使用排序的键,除非它传递,在这种情况下的值将会选择
  2. (见下文)。任何没有任何反对将默默地被丢弃,除非他们都没有在这种情况下将引发 ValueError。
  3. axis: {0,1,…},默认值为 0。要连接沿轴。
  4. join: {‘内部’、 ‘外’},默认 ‘外’。如何处理其他 axis(es) 上的索引。联盟内、 外的交叉口。
  5. ignore_index︰ 布尔值、 默认 False。如果为 True,则不要串联轴上使用的索引值。由此产生的轴将标记
  6. 0,…,n-1。这是有用的如果你串联串联轴没有有意义的索引信息的对象。请注意在联接中仍然受到尊重的其他轴上的索引值。
  7. join_axes︰ 索引对象的列表。具体的指标,用于其他 n-1 轴而不是执行内部/外部设置逻辑。 keys︰
  8. 序列,默认为无。构建分层索引使用通过的键作为最外面的级别。如果多个级别获得通过,应包含元组。
  9. levels︰ 列表的序列,默认为无。具体水平 (唯一值) 用于构建多重。否则,他们将推断钥匙。
  10. names︰ 列表中,默认为无。由此产生的分层索引中的级的名称。
  11. verify_integrity︰ 布尔值、 默认 False。检查是否新的串联的轴包含重复项。这可以是相对于实际数据串联非常昂贵。
  12. 副本︰ 布尔值、 默认 True。如果为 False,请不要,不必要地复制数据。

2.连接(concat)

使用concat()函数可以将两个DataFrame沿着行或列的方向进行连接。例如,我们可以将两个DataFrame沿着列的方向进行连接:

        

concatenated_data = pd.concat([students_df, scores_df], axis=1)print("连接后的数据:")print(concatenated_data)

输出结果为:

  

连接后的数据:

   id     name  id  math

0   1    Alice   1    90

1   2      Bob   2    80

2   3  Charlie   3    70

   

九、数据透视与交叉表

1.透视表(pivot_table)

使用pivot_table()函数可以创建数据透视表,用于对数据进行汇总和比较。例如,我们有一个销售数据表,包含产品类别、日期和销售额等信息,我们可以这样创建一个透视表,统计每个类别在每个月的总销售额:

     

sales_data = {'category': ['A', 'B', 'C', 'A', 'B', 'C'],

              'date': ['2022-01-01', '2022-01-01', '2022-01-01', '2022-02-01', '2022-02-01', '2022-02-01'],

              'sales': [100, 200, 300, 400, 500, 600]}

sales_df = pd.DataFrame(sales_data)



pivot_table = pd.pivot_table(sales_df, values='sales', index='category', columns='date', aggfunc='sum')print("数据透视表:")print(pivot_table)

输出结果为:

数据透视表:

date       2022-01-01  2022-02-01

category                      

A                100         400

B                200         500

C                300         600

2.交叉表(crosstab)

使用crosstab()函数可以创建交叉表,用于显示两个变量之间的频数分布。例如,我们有一个考试成绩表,包含学生姓名和科目成绩等信息,我们可以这样创建一个交叉表,统计每个学生在每个科目的通过情况:

  

exam_data = {'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],

             'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],

             'pass': [True, False, True, True, False, True]}

exam_df = pd.DataFrame(exam_data)



crosstab = pd.crosstab(index=exam_df['name'], columns=exam_df['subject'], values=exam_df['pass'], aggfunc='sum')print("交叉表:")print(crosstab)

输出结果为:

    

交叉表:

subject  English  Math

name                   

Alice          1     1

Bob            0     1

Charlie        1     1


总结

Pandas 提供了丰富的数据计算方法,使得对数据的处理和分析变得更加高效和便捷。通过掌握这些方法,我们可以更好地利用 Pandas 的功能,实现对数据的快速计算和分析。希望本文能够帮助读者更好地理解和应用 Pandas 的数据计算方法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值