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