Python 数据分析学习(1)Numpy与Pandas
文章目录
前言
` 本文记录了Numpy与Pandas的学习
一、Numpy入门
NumPy 是很多数据或科学相关拍档包的基础,所以 它经常被用于科学及工程领域。它核心的数据结构叫 ND array,意思是 n 维数组。
NumPy的数组和Python的内置列表有相似之处,也有不同之处。相似之处是我们都可以通过索引去获得某个元素,可以通过切片获得某范围的多个元素,也可以去迭代各个元素。不同之处是NumPy 数组里的元素得是同一类型的,比如全都是数字、全都是字符串等等。列表则没有这个要求,但优势是在对当派数组进行大规模数学运算或其他操作时,执行速度远高于拍到内置列表。因此,效率是数据处理方面选择 NumPy 的首要原因。
如果咱们传入的是这样一个简单的列表,它会被转换成一维数组。如果咱们传入的是这样一个嵌套列表,也就是一个列表里面有另一个列表的情况,它会被转换成二维数组。
import numpy as np#导入numpy库
arr1=np.array([1,2,3])#创建一个一维数组
arr1#显示数组
array([1, 2, 3])
下面是一维数组

import numpy as np #导入numpy库
arr2=np.array([[1,2,3],[4,5,6]])#创建一个二维数组
arr2#显示数组
print(arr1.ndim)#显示数组的维度
print(arr2.shape)# shape 会返回一个元组,表示各个维度的元素的个数,对于二维数组,第一个元素表示行数,第二个元素表示列数,
实际上就是这个数组的形状
print(arr2.size)#显示数组的元素个数
print(arr2.dtype)#显示数组的元素类型
array([0,1,2,3],
[1,4,5,6])
1
(2, 3) #也就是说两行,三列,
6
int32

二、pandas
pandas 的优势在于,由于它是构建在numpy之上的,所以继承了囊派高性能的数组计算功能,同时它还提供了很多复杂精细的数据处理功能。使用pandas命令是:
import pandas as pd
就是给 pandas 这个库一个别名叫pd,可以让我们使用 pandas 库内任何方法或变量等东西的时候,只需要打 PD 两个字母,而不是pandas。
1.Series
这个东西和numpy一维数组很相似,会让你觉得熟悉。要创建一个series,我们可以用 serious 方法参数传入一个列表。注意, series 第一个字母要大写,说明这其实是 series 类的构造函数,会返回给我们一个 series 类的实例,咱们把 S1 输出来,可以看到和numpy数组一个区别在于它不只展示了里面有什么元素,左边还专门展示对应的index,也就是索引。
import pandas as pd#导入pandas库
s1=pd.Series([5, 17,3,26, 31])#创建一个序列
s1
0 5
1 17
2 3
3 26
4 31
但是这个索引是可以自己指定的, 比如创建的时候,后面再跟一个 index 参数为 ADBCE 组成的列表,那元素对应的索引也变成了 ADBCE 输入这个 series 的时候,你也会看到元素旁边的索引变成了我们所指定的。当我们对 serious 元素进行取值的时候,可以直接用我们指定的新索引,但用原先的数字顺序仍然管用,所以相当于是多了一种索引方法。那为了区分我们自己指定的新索引以及仍然管用的位置索引,我们指定的新索引也被叫做标签索引。
2.DataFrame
不只有索引,也有列名。那换个角度来看, data frame 就像是由 serious 组成的字典,每个 series 对应一个键名,也就是列名。

比如
s_id=pd.Series(["01","02","03","04","05"])
s_class=pd.Series(["二班","一班","二班",“三班","一班"])
s_grade =pd.Series([92,67,70,88,76])
df1=pd.DataFrame({"学号":s_id,“班级":S_class,"成绩":S_grade})

会输出这样一个表格,参数传入一个字典,值是series,而键是各个 series 所对应的列名。
但是如果data frame 默认的索引和 series 一样,都是从 0 开始依次递增的整数来表示位置。但如果咱们传入的 series 本身有标签索引的话, data frame 的索引也会变成相应的标签。
S_id=pd.Series(["01"
index=["小明",“小丽”,“小华"])
s_class=pd.Series(["二班","-班",“二班“"三班”,“一班”】,
index=["小明”,"小红",“小杰”,,“小丽”,“小华"】)
s_grade=pd.Series([92,67,70,88,76],
index=["小明”,“小红”,“小杰”,“小丽”,“小华"])
df3=pd.DataFrame({"学号":s_id,"班级":S_class,"成绩":S_grade})
df3
data frame 还有一个很实用的属性是T,注意是大写的t,它返回的结果会把行和列进行转置,也就是把行变成列,把列变成行。

如何从 data frame 里提取想要的部分数据。在 data frame 后面跟上方括号里面放上列名,就能把列名对应的列提取出来.

也可以通过点儿列名来获取对应列,因为每列Series其实也是 data frame 的属性,所以用属性名来获取效果是一模一样的。但是如果说列名里面有空格或特殊符号的话,就不能通过属性名来获取了,只能通过方括号。如果我们想提取出多个列的话,还可以在方括号里放入列表,再在列表里面传入多个属性值,那这样做返回的就不是series,而是 data frame 了,因为结果有多个 series 所组成。

那么问题来了,如过想要提取行怎么办呢?当然是用索引来提取,第一个是 用标签索引,第二个是用位置索引。

给 lock 标签索引范围,或是给 i look 位置索引范围,可以获得多行数据。和 service 一样,这其中有个陷阱是位置索引做切片是不包含结束值的,而标签索引做切片会包含结束值。

如果咱们想得到任意行组成的达成的话,也可以给 log 和 i log 后面的方括号里放一个列表,里面是想提取出的行的标签或位置索引。这个和咱们之前提取任意列是类似的,都是方括号里面再放一个方括号。

如果咱们想得到任意行组成的达成的话,也可以给loc和 i loc 后面的方括号里放一个列表,里面是想提取出的行的标签或位置索引。这个和咱们之前提取任意列是类似的,都是方括号里面再放一个方括号。

除了用来提取行和列之外, loc 和 i loc 还可以用来提取某个表格数据。在方括号里面放上两个参数,第一个表示行,第二个表示列,就能提取出表格某个位置上的值。提取部分表格数据也是一样,只需要在方括号里面放上两个参数,第一个表示行的切片,第二个表示列的切片,就可以把表格的一部分给切出来。

三、数据处理
1.json数组
Jason 有两种数据结构,对象和数组可以分别被转换成 Python 字典和列表。
对象以大括号开头和结尾,然后里面都是键值对,也就是键冒后面跟上键所对应的值,每个键值对之间用逗号进行分隔。
1.CSV
它的结构基本上就是一个表格。要想看到逗号对齐后的效果,我们不需要手动处理。用 Excel 等表格软件打开 CSV 文件,就能直接看到 CSV 以表格形式长什么样。你可以尝试用代码编辑器或者除文本编辑器打开,但更好的方法是用代码读取转换成 data free,然后用 pandas 库里面的方法想看几行,而不用等海量数据全部加载出来。
如何读取CSV文件 pandas里有个叫做read_csv的函数,可以用来读CSV文件,参数就是传入这个 CSB 文件的路径。
import pandas as pd
pd.read_csv("./fifa_players.csv")
这个方法会默认把第一行的内容作为列名。但如果原本的文件没有表格头作为第一行,也就是说第一行直接以实际数据开始的话,你可以设置可选参数 highlight 为 now 表示不要把第一行当成列名,那解析出来, data frame 就会把第一行视为第一条数据列名,用从 0 开始的数字代替,代码如下:
import pandas as pd
pd.read_csv("./fifa_players.csv",header=None)
另外,虽然read_csv默认会把第一行解析成列名,但不会把第一列默认解析成索引,而是用默认的位置索引。所以如果你想把某一列的值作为标签索引的话,可以传入 index_col这个可选参数,让它的值等于你想指定为标签索引的列名。像这样写好后,返回的 data frame 就会把 player ID 的值作为标签索引,那我们就可以直接通过球员ID,而不是仅靠位置索引来提取数据了。
import pandas as pd
pd.read_csv("./fifa_players.csv",index_col="player_id")
三、评估数据
1、数据的整洁性
肮脏混乱的数据不是我们想要的原料,直接动手分析只会得到不干净的分析结果。那我们要如何评估数据呢?评估数据的时候我们主要看两个方面,结构和内容。如果原始数据在结构方面存在问题,我们会把处理前的数据叫做乱数据,与之对应的是整洁数据。据埃德加柯德的第三范式,包括了以下三个特点,每列是一个变量,每行是一个观察值,每个单元格是一个值。任何不符合以上三个特点的数据都是乱数据。

比如这个表格里每列表示一个和贷款相关的变量,比如贷款的金额每行表示一条贷款信息的观察值,比如客户二位的贷款,而每个单元格里面只有一个值,因此这个表格是符合整洁数据的三个特点的.

不整洁的数据存在多种多样的例子,比如这个表格一列里面表示了多个变量,包括姓名、年龄、地址,而且一行里面跨越了多个观察值,不是同一个人的信息,那把这个表格转换成整截数据后,它应该长成这样才对,符合我们之前说的三个标准。

而这个表格猛地一看像整洁的数据,但其实它并不符合所有标准,具体来说违反了每列只包含一个变量的规则。比如 很多列包含了多个变量人数和年龄组。

而把它转成整洁变量后长这样:

一方面,如果原始数据在内容方面存在问题,我们会把处理前的数据叫做脏数据,与之对应的是干净数据。脏数据可能存在的问题包括:
第一,丢失数据,也就是说有些值为空缺,空缺值的影响大小取决于具体情况。有些时候可以允许某些列的数据不全,但我们仍然要进行评估,否则可能会导致错误的分析。比如,如果我们没有考虑到有同学缺考,存在成绩缺失,直接用总分数除以总人头穷平均,就会导致计算结果被缺失值拉低。
第二,重复数据,即数据中有些观察值重复出现,那有些值的重复不是问题。比如说班级里学生的性别很难不重复,但如果班级花名册里有两个人学号、姓名、性别、身高完全一样,那这就是有问题。而且学号作为班级里学生的唯一标识符,光这个变量存在重复已经是不正确的了。

第三,不一致数据,即不同数据值实际含义相同或不同数据值实际指代同一目标,比如数字单位不一致、全称和简写混用、中文数字和阿拉伯数字混用等等。
第四,无效或错误数据。脱离现实规则的数据都是无效数据,比如说负数的升高,错误数据则指的是虽然符合规则但并不准确的数据。比如一位成年患者的体重基础值为 3 公斤。
总结
本文仅仅简单介绍了pandas的使用,
Numpy与Pandas&spm=1001.2101.3001.5002&articleId=141335475&d=1&t=3&u=3cb539c2bd8643d5b2176cd8c06c9d65)
5612

被折叠的 条评论
为什么被折叠?



