第一章 第三节 Pandas 排序和describe()函数查看数据统计信息

本文通过实例讲解如何使用Pandas对数据进行排序、算术计算,包括按指定列升序降序排列,以及利用describe()函数分析数据统计。涉及泰坦尼克号数据的排序分析和家庭规模计算,展示了数据初步探索的重要步骤。

复习:在前面我们已经学习了Pandas基础,知道利用Pandas读取csv数据的增删查改,今天我们要学习的就是探索性数据分析,主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。

1 第一章:探索性数据分析

开始之前,导入numpy、pandas包和数据

#加载所需的库

import numpy as np
import pandas as pd

#载入之前保存的train_chinese.csv数据,关于泰坦尼克号的任务,我们就使用这个数据

df = pd.read_csv('D:/学习/DataAnalysis_2106/hands-on-data-analysis-master/第一单元项目集合/train_chinese.csv')

1.6 了解你的数据吗?

教材《Python for Data Analysis》第五章

1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序

具体请看《利用Python进行数据分析》第五章 排序和排名 部分

#自己构建一个都为数字的DataFrame数据

frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
                     index=['2', '1'],
                     columns=['d', 'a', 'b', 'c'])
print(frame)

【代码解析】

pd.DataFrame() :创建一个DataFrame对象

np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7

index=[‘2’, ‘1’] :DataFrame 对象的行索引值

columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的列名

【代码解析】

pd.DataFrame() :创建一个DataFrame对象

np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7

index=[‘2’, ‘1’] :DataFrame 对象的索引值

columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的列名

【问题】:大多数时候我们都是想根据列的值来排序,所以将你构建的DataFrame中的数据根据某一列,升序排列

frame.sort_values(by='c', ascending=True)

【思考】通过书本你能说出Pandas对DataFrame数据的其他排序方式吗?

【总结】下面将不同的排序方式做一个总结

1.让行索引升序排序

frame.sort_index()

2.让列索引升序排序

frame.sort_index(axis=1)

3.让列索引降序排序

frame.sort_index(axis=1, ascending=False)

4.让任选两列数据同时降序排序

frame.sort_values(by=['a', 'c'], ascending=False)
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?

‘’’
在开始我们已经导入了train_chinese.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可
head(20) : 读取前20条数据

‘’’

print(df.sort_values(by=['票价', '年龄'], ascending=False).head(20))

【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

当然,这只是我的想法,你还可以有更多想法,欢迎写在你的学习笔记中。

多做几个数据的排序

print(df.sort_values(by=['兄弟姐妹个数'], ascending=False).head(20))

兄弟姐妹最多的20个人全没了

1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分

#自己构建两个都为数字的DataFrame数据

frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
print(frame1_a)
print(frame1_b)

将frame_a和frame_b进行相加

frame1_a + frame1_b

【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分,多在网络上查找相关学习资料。

1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

‘’’
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
‘’’

max(df['兄弟姐妹个数'] + df['父母子女个数'])

【提醒】我们只需找出”兄弟姐妹个数“和”父母子女个数“之和最大的数,当然你还可以想出很多方法和思考角度,欢迎你来说出你的看法。

1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息

#(1) 关键知识点示例做一遍(简单数据)

具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计 部分

#自己构建一个有数字有空值的DataFrame数据

frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])

调用 describe 函数,观察frame2的数据基本信息

frame2.describe()


'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''
1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?

‘’’
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
‘’’

df['票价'].describe()

【思考】从上面数据我们可以看出,一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。

多做几个组数据的统计,看看你能分析出什么?

df['年龄'].describe()

【思考】从714个年龄数据中可以看出,乘客的平均年龄约为29.7岁,75%的人小于38岁,最大年纪的乘客为80岁。

【总结】本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。

### 什么是 `describe()` 函数? `describe()` 函数Pandas 库中的一个重要工具,用于生成描述性统计信息。它能够为数据集提供一个快速的概览,包括计数、均值、标准差、最小值、四分位数最大值等统计量[^1]。 ### `describe()` 函数的基本功能 对于数值型数据,`describe()` 函数默认计算以下统计量: - 计数(count):非空值的数量。 - 均值(mean):所有值的平均值。 - 标准差(std):数据的标准偏差。 - 最小值(min):数据中的最小值。 - 四分位数(25%, 50%, 75%):第一四分位数、中位数第三四分位数。 - 最大值(max):数据中的最大值。 对于非数值型数据(如分类数据),`describe()` 函数会返回不同的统计量,例如唯一值的数量最频繁出现的值[^1]。 ### 参数说明 `describe()` 函数支持多个参数以满足不同的需求: - **percentiles**:指定需要计算的百分位数,默认值为 [0.25, 0.5, 0.75]。用户可以通过此参数自定义百分位数的计算范围。 - **include**:指定要包含的数据类型。例如,`include='all'` 将返回所有列的统计信息,而 `include=['object']` 只返回对象类型的列[^1]。 - **exclude**:排除特定数据类型的列。例如,`exclude=['number']` 将忽略数值型列[^1]。 - **datetime_is_numeric**:控制日期时间列是否被视为数值进行处理。如果设置为 `True`,则日期时间列会被视为数值型数据[^3]。 ### 示例代码 以下是一些使用 `describe()` 函数的示例代码: #### 示例 1:使用默认参数 ```python import pandas as pd data = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': ['x', 'y', 'z', 'x', 'y'] }) description = data.describe() print(description) ``` #### 示例 2:使用 `percentiles` 参数 ```python description = data.describe(percentiles=[0.1, 0.9]) print(description) ``` #### 示例 3:使用 `include` `exclude` 参数 ```python # 包括所有列 description_all = data.describe(include='all') print(description_all) # 排除数值型列 description_exclude_number = data.describe(exclude=['number']) print(description_exclude_number) ``` #### 示例 4:添加方差 通过结合其他 Pandas 方法,可以扩展 `describe()` 的输出内容,例如添加方差: ```python import pandas as pd data = pd.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50] }) describe = data.describe() variance = pd.Series(data.var(), name='variance') extended_description = describe.append(variance) print(extended_description) ``` ### 注意事项 在实际应用中,用户可以根据具体需求调整 `describe()` 函数的参数以获取更详细的统计信息。此外,`describe()` 函数的结果可以与其他 Pandas 方法结合使用,从而实现更加灵活的数据分析[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值