当前位置:   article > 正文

Pandas教程(非常详细)_pandas 教程,2024年最新又是一年金九银十

pandas教程

print(s)

输出结果:

100 a
101 b
102 c
103 d
dtype: object

3) dict创建Series对象

您可以把 dict 作为输入数据。如果没有传入索引时会按照字典的键来构造索引;反之,当传递了索引时需要将索引标签与字典中的值一一对应。

下面两组示例分别对上述两种情况做了演示。

示例1,没有传递索引时:

import pandas as pd
import numpy as np
data = {‘a’ : 0., ‘b’ : 1., ‘c’ : 2.}
s = pd.Series(data)
print(s)

输出结果:

a 0.0
b 1.0
c 2.0
dtype: float64

示例 2,为index参数传递索引时:

import pandas as pd
import numpy as np
data = {‘a’ : 0., ‘b’ : 1., ‘c’ : 2.}
s = pd.Series(data,index=[‘b’,‘c’,‘d’,‘a’])
print(s)

输出结果:

b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

当传递的索引值无法找到与其对应的值时,使用 NaN(非数字)填充。

4) 标量创建Series对象

如果 data 是标量值,则必须提供索引,示例如下:

import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print(s)

输出如下:

0 5
1 5
2 5
3 5
dtype: int64

标量值按照 index 的数量进行重复,并与其一一对应。

访问Series数据

上述讲解了创建 Series 对象的多种方式,那么我们应该如何访问 Series 序列中元素呢?分为两种方式,一种是位置索引访问;另一种是索引标签访问。

1) 位置索引访问

这种访问方式与 ndarray 和 list 相同,使用元素自身的下标进行访问。我们知道数组的索引计数从 0 开始,这表示第一个元素存储在第 0 个索引位置上,以此类推,就可以获得 Series 序列中的每个元素。下面看一组简单的示例:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
print(s[0]) #位置下标
print(s[‘a’]) #标签下标

输出结果:

1
1

通过切片的方式访问 Series 序列中的数据,示例如下:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
print(s[:3])

输出结果:

a 1
b 2
c 3
dtype: int64

如果想要获取最后三个元素,也可以使用下面的方式:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
print(s[-3:])

输出结果:

c 3
d 4
e 5
dtype: int64

2) 索引标签访问

Series 类似于固定大小的 dict,把 index 中的索引标签当做 key,而把 Series 序列中的元素值当做 value,然后通过 index 索引标签来访问或者修改元素值。

示例1,使用索标签访问单个元素值:

import pandas as pd
s = pd.Series([6,7,8,9,10],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
print(s[‘a’])

输出结果:

6

示例 2,使用索引标签访问多个元素值

import pandas as pd
s = pd.Series([6,7,8,9,10],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
print(s[[‘a’,‘c’,‘d’]])

输出结果:

a 6
c 8
d 9
dtype: int64

示例3,如果使用了 index 中不包含的标签,则会触发异常:

import pandas as pd
s = pd.Series([6,7,8,9,10],index = [‘a’,‘b’,‘c’,‘d’,‘e’])
#不包含f值
print(s[‘f’])

输出结果:


KeyError: ‘f’

Series常用属性

下面我们介绍 Series 的常用属性和方法。在下表列出了 Series 对象的常用属性。

名称属性
axes以列表的形式返回所有行索引标签。
dtype返回对象的数据类型。
empty返回一个空的 Series 对象。
ndim返回输入数据的维数。
size返回输入数据的元素数量。
values以 ndarray 的形式返回 Series 对象。
index返回一个RangeIndex对象,用来描述索引的取值范围。

现在创建一个 Series 对象,并演示如何使用上述表格中的属性。如下所示:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s)

输出结果:

0 0.898097
1 0.730210
2 2.307401
3 -1.723065
4 0.346728
dtype: float64

上述示例的行索引标签是 [0,1,2,3,4]。

1) axes

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print (“The axes are:”)
print(s.axes)

输出结果

The axes are:
[RangeIndex(start=0, stop=5, step=1)]

2) dtype

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print (“The dtype is:”)
print(s.dtype)

输出结果:

The dtype is:
float64

3) empty

返回一个布尔值,用于判断数据对象是否为空。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(“是否为空对象?”)
print (s.empty)

输出结果:

是否为空对象?
False

4) ndim

查看序列的维数。根据定义,Series 是一维数据结构,因此它始终返回 1。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print (s)
print (s.ndim)

输出结果:

0 0.311485
1 1.748860
2 -0.022721
3 -0.129223
4 -0.489824
dtype: float64
1

5) size

返回 Series 对象的大小(长度)。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(3))
print (s)
#series的长度大小
print(s.size)

输出结果:

0 -1.866261
1 -0.636726
2 0.586037
dtype: float64
3

6) values

以数组的形式返回 Series 对象中的数据。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(6))
print(s)
print(“输出series中数据”)
print(s.values)

输出结果:

0 -0.502100
1 0.696194
2 -0.982063
3 0.416430
4 -1.384514
5 0.444303
dtype: float64
输出series中数据
[-0.50210028 0.69619407 -0.98206327 0.41642976 -1.38451433 0.44430257]

7) index

该属性用来查看 Series 中索引的取值范围。示例如下:

#显示索引
import pandas as pd
s=pd.Series([1,2,5,8],index=[‘a’,‘b’,‘c’,‘d’])
print(s.index)
#隐式索引
s1=pd.Series([1,2,5,8])
print(s1.index)

输出结果:

隐式索引:
Index([‘a’, ‘b’, ‘c’, ‘d’], dtype=‘object’)
显示索引:
RangeIndex(start=0, stop=4, step=1)

Series常用方法

1) head()&tail()查看数据

如果想要查看 Series 的某一部分数据,可以使用 head() 或者 tail() 方法。其中 head() 返回前 n 行数据,默认显示前 5 行数据。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print (“The original series is:”)
print (s)
#返回前三行数据
print (s.head(3))

输出结果:

原系列输出结果:
0 1.249679
1 0.636487
2 -0.987621
3 0.999613
4 1.607751
head(3)输出:
dtype: float64
0 1.249679
1 0.636487
2 -0.987621
dtype: float64

tail() 返回的是后 n 行数据,默认为后 5 行。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(4))
#原series
print(s)
#输出后两行数据
print (s.tail(2))

输出结果:

原Series输出:
0 0.053340
1 2.165836
2 -0.719175
3 -0.035178
输出后两行数据:
dtype: float64
2 -0.719175
3 -0.035178
dtype: float64

2) isnull()&nonull()检测缺失值

isnull() 和 nonull() 用于检测 Series 中的缺失值。所谓缺失值,顾名思义就是值不存在、丢失、缺少。

  • isnull():如果为值不存在或者缺失,则返回 True。
  • notnull():如果值不存在或者缺失,则返回 False。

其实不难理解,在实际的数据分析任物中,数据的收集往往要经历一个繁琐的过程。在这个过程中难免会因为一些不可抗力,或者人为因素导致数据丢失的现象。这时,我们可以使用相应的方法对缺失值进行处理,比如均值插值、数据补齐等方法。上述两个方法就是帮助我们检测是否存在缺失值。示例如下:

import pandas as pd
#None代表缺失数据
s=pd.Series([1,2,5,None])
print(pd.isnull(s)) #是空值返回True
print(pd.notnull(s)) #空值返回False

输出结果:

0 False
1 False
2 False
3 True
dtype: bool

notnull():
0 True
1 True
2 True
3 False
dtype: bool

Pandas DataFrame入门教程(图解版)

DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一,可以这么说,掌握了 DataFrame 的用法,你就拥有了学习数据分析的基本能力。

认识DataFrame结构

DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:

Dataframe结构示意图

表格中展示了某个销售团队个人信息和绩效评级(rating)的相关数据。数据以行和列形式来表示,其中每一列表示一个属性,而每一行表示一个条目的信息。

下表展示了上述表格中每一列标签所描述数据的数据类型,如下所示:

ColumnType
nameString
ageinteger
genderString
ratingFloat

DataFrame 的每一行数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列标签。因此 DataFrame 其实是从 Series 的基础上演变而来。在数据分析任务中 DataFrame 的应用非常广泛,因为它描述数据的更为清晰、直观。

通过示例对 DataFrame 结构做进一步讲解。 下面展示了一张学生成绩表,如下所示:

pandas dataframe结构

DataFrame 结构类似于 Execl 的表格型,表格中列标签的含义如下所示:

  • Regd.No:表示登记的序列号
  • Name:学生姓名
  • Marks:学生分数

同 Series 一样,DataFrame 自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应。上述表格的行标签从 0 到 5,共记录了 5 条数据(图中将行标签省略)。当然你也可以用“显式索引”的方式来设置行标签。

下面对 DataFrame 数据结构的特点做简单地总结,如下所示:

  • DataFrame 每一列的标签值允许使用不同的数据类型;
  • DataFrame 是表格型的数据结构,具有行和列;
  • DataFrame 中的每个数据值都可以被修改。
  • DataFrame 结构的行数、列数允许增加或者删除;
  • DataFrame 有两个方向的标签轴,分别是行标签和列标签;
  • DataFrame 可以对行和列执行算术运算。

创建DataFrame对象

创建 DataFrame 对象的语法格式如下:

import pandas as pd
pd.DataFrame( data, index, columns, dtype, copy)

参数说明:

参数名称说明
data输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
index行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。
columns列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。
dtypedtype表示每一列的数据类型。
copy默认为 False,表示复制数据 data。

Pandas 提供了多种创建 DataFrame 对象的方式,主要包含以下五种,分别进行介绍。

1) 创建空的DataFrame对象

使用下列方式创建一个空的 DataFrame,这是 DataFrame 最基本的创建方法。

import pandas as pd
df = pd.DataFrame()
print(df)

输出结果如下:

Empty DataFrame
Columns: []
Index: []

2) 列表创建DataFame对象

可以使用单一列表或嵌套列表来创建一个 DataFrame。

示例 1,单一列表创建 DataFrame:

import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)

输出如下:

0
0 1
1 2
2 3
3 4
4 5

示例 2,使用嵌套列表创建 DataFrame 对象:

import pandas as pd
data = [[‘Alex’,10],[‘Bob’,12],[‘Clarke’,13]]
df = pd.DataFrame(data,columns=[‘Name’,‘Age’])
print(df)

输出结果:

Name Age
0 Alex 10
1 Bob 12
2 Clarke 13

示例 3,指定数值元素的数据类型为 float:

import pandas as pd
data = [[‘Alex’,10],[‘Bob’,12],[‘Clarke’,13]]
df = pd.DataFrame(data,columns=[‘Name’,‘Age’],dtype=float)
print(df)

输出结果:

Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0

3) 字典嵌套列表创建

data 字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是 range(n),其中 n 代表数组长度。

示例 4:

import pandas as pd
data = {‘Name’:[‘Tom’, ‘Jack’, ‘Steve’, ‘Ricky’],‘Age’:[28,34,29,42]}
df = pd.DataFrame(data)
print(df)

输出结果:

Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky

注意:这里使用了默认行标签,也就是 range(n)。它生成了 0,1,2,3,并分别对应了列表中的每个元素值。

示例 5,现在给上述示例 4 添加自定义的行标签:

import pandas as pd
data = {‘Name’:[‘Tom’, ‘Jack’, ‘Steve’, ‘Ricky’],‘Age’:[28,34,29,42]}
df = pd.DataFrame(data, index=[‘rank1’,‘rank2’,‘rank3’,‘rank4’])
print(df)

输出结果如下:

Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky

注意:index 参数为每行分配了一个索引。

4) 列表嵌套字典创建DataFrame对象

列表嵌套字典可以作为输入数据传递给 DataFrame 构造函数。默认情况下,字典的键被用作列名。

示例 6 如下:

import pandas as pd
data = [{‘a’: 1, ‘b’: 2},{‘a’: 5, ‘b’: 10, ‘c’: 20}]
df = pd.DataFrame(data)
print(df)

输出结果:

a b c
0 1 2 NaN
1 5 10 20.0

注意:如果其中某个元素值缺失,也就是字典的 key 无法找到对应的 value,将使用 NaN 代替。

示例 7,给上述示例 6 添加行标签索引:

import pandas as pd
data = [{‘a’: 1, ‘b’: 2},{‘a’: 5, ‘b’: 10, ‘c’: 20}]
df = pd.DataFrame(data, index=[‘first’, ‘second’])
print(df)

输出结果:

a b c
first 1 2 NaN
second 5 10 20.0

示例 8,如何使用字典嵌套列表以及行、列索引表创建一个 DataFrame 对象。

import pandas as pd
data = [{‘a’: 1, ‘b’: 2},{‘a’: 5, ‘b’: 10, ‘c’: 20}]
df1 = pd.DataFrame(data, index=[‘first’, ‘second’], columns=[‘a’, ‘b’])
df2 = pd.DataFrame(data, index=[‘first’, ‘second’], columns=[‘a’, ‘b1’])
print(df1)
print(df2)

输出结果:

#df2输出
a b
first 1 2
second 5 10

#df1输出
a b1
first 1 NaN
second 5 NaN

注意:因为 b1 在字典键中不存在,所以对应值为 NaN。

5) Series创建DataFrame对象

您也可以传递一个字典形式的 Series,从而创建一个 DataFrame 对象,其输出结果的行索引是所有 index 的合集。 示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
print(df)

输出结果如下:

one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4

注意:对于 one 列而言,此处虽然显示了行索引 ‘d’,但由于没有与其对应的值,所以它的值为 NaN。

列索引操作DataFrame

DataFrame 可以使用列索(columns index)引来完成数据的选取、添加和删除操作。下面依次对这些操作进行介绍。

1) 列索引选取数据列

您可以使用列索引,轻松实现数据选取,示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
print(df [‘one’])

输出结果:

a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64

2) 列索引添加数据列

使用 columns 列索引表标签可以实现添加新的数据列,示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
#使用df[‘列’]=值,插入新的数据列
df[‘three’]=pd.Series([10,20,30],index=[‘a’,‘b’,‘c’])
print(df)
#将已经存在的数据列做相加运算
df[‘four’]=df[‘one’]+df[‘three’]
print(df)

输出结果:

使用列索引创建新数据列:
one two three
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN

已存在的数据列做算术运算:
one two three four
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 30.0 33.0
d NaN 4 NaN NaN

上述示例,我们初次使用了 DataFrame 的算术运算,这和 NumPy 非常相似。除了使用df[]=value的方式外,您还可以使用 insert() 方法插入新的列,示例如下:

import pandas as pd
info=[[‘Jack’,18],[‘Helen’,19],[‘John’,17]]
df=pd.DataFrame(info,columns=[‘name’,‘age’])
print(df)
#注意是column参数
#数值1代表插入到columns列表的索引位置
df.insert(1,column=‘score’,value=[91,90,75])
print(df)

输出结果:

添加前:
name age
0 Jack 18
1 Helen 19
2 John 17

添加后:
name score age
0 Jack 91 18
1 Helen 90 19
2 John 75 17

3) 列索引删除数据列

通过 del 和 pop() 都能够删除 DataFrame 中的数据列。示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’]),
‘three’ : pd.Series([10,20,30], index=[‘a’,‘b’,‘c’])}
df = pd.DataFrame(d)
print (“Our dataframe is:”)
print(df)
#使用del删除
del df[‘one’]
print(df)
#使用pop方法删除
df.pop(‘two’)
print (df)

输出结果:

原DataFrame:
one three two
a 1.0 10.0 1
b 2.0 20.0 2
c 3.0 30.0 3
d NaN NaN 4

使用del删除 first:
three two
a 10.0 1
b 20.0 2
c 30.0 3
d NaN 4

使用 pop()删除:
three
a 10.0
b 20.0
c 30.0
d NaN

行索引操作DataFrame

理解了上述的列索引操作后,行索引操作就变的简单。下面看一下,如何使用行索引来选取 DataFrame 中的数据。

1) 标签索引选取

可以将行标签传递给 loc 函数,来选取数据。示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
print(df.loc[‘b’])

输出结果:

one 2.0two 2.0Name: b, dtype: float64

注意:loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引。

2) 整数索引选取

通过将数据行所在的索引位置传递给 iloc 函数,也可以实现数据行选取。示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
print (df.iloc[2])

输出结果:

one 3.0
two 3.0
Name: c, dtype: float64

注意:iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。

3) 切片操作多行选取

您也可以使用切片的方式同时选取多行。示例如下:

import pandas as pd
d = {‘one’ : pd.Series([1, 2, 3], index=[‘a’, ‘b’, ‘c’]),
‘two’ : pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])}
df = pd.DataFrame(d)
#左闭右开
print(df[2:4])

输出结果:

one two
c 3.0 3
d NaN 4

4) 添加数据行

使用 append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行。示例如下:

import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = [‘a’,‘b’])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = [‘a’,‘b’])
#在行末追加新数据行
df = df.append(df2)
print(df)

输出结果:

a b
0 1 2
1 3 4
0 5 6
1 7 8

5) 删除数据行

您可以使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除。示例如下:

import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = [‘a’,‘b’])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = [‘a’,‘b’])
df = df.append(df2)
print(df)
#注意此处调用了drop()方法
df = df.drop(0)
print (df)

输出结果:

执行drop(0)前:
a b
0 1 2
1 3 4
0 5 6
1 7 8

执行drop(0)后:
a b
1 3 4
1 7 8

在上述的示例中,默认使用 range(2) 生成了行索引,并通过 drop(0) 同时删除了两行数据。

常用属性和方法汇总

DataFrame 的属性和方法,与 Series 相差无几,如下所示:

名称属性&方法描述
T行和列转置。
axes返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes返回每列数据的数据类型。
emptyDataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim轴的数量,也指数组的维数。
shape返回一个元组,表示了 DataFrame 维度。
sizeDataFrame中的元素数量。
values使用 numpy 数组表示 DataFrame 中的元素值。
head()返回前 n 行数据。
tail()返回后 n 行数据。
shift()将行或列移动指定的步幅长度

下面对 DataFrame 常用属性进行演示,首先我们创建一个 DataFrame 对象,示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#输出series
print(df)

输出结果:

输出 series 数据:
Name years Rating
0 c语言中文网 5 4.23
1 编程帮 6 3.24
2 百度 15 3.98
3 360搜索 28 2.56
4 谷歌 3 3.20
5 微学苑 19 4.60
6 Bing搜索 23 3.80

1) T(Transpose)转置

返回 DataFrame 的转置,也就是把行和列进行交换。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#输出DataFrame的转置
print(df.T)

输出结果:

Our data series is:
0 1 2 3 4 5 6
Name c语言中文网 编程帮 百度 360搜索 谷歌 微学苑 Bing搜索
years 5 6 15 28 3 19 23
Rating 4.23 3.24 3.98 2.56 3.2 4.6 3.8

2) axes

返回一个行标签、列标签组成的列表。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#输出行、列标签
print(df.axes)

输出结果:

[RangeIndex(start=0, stop=7, step=1), Index([‘Name’, ‘years’, ‘Rating’], dtype=‘object’)]

3) dtypes

返回每一列的数据类型。示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#输出行、列标签
print(df.dtypes)

输出结果:

Name object
years int64
Rating float64
dtype: object

4) empty

返回一个布尔值,判断输出的数据对象是否为空,若为 True 表示对象为空。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#判断输入数据是否为空
print(df.empty)

输出结果:

判断输入对象是否为空:
False

5) ndim

返回数据对象的维数。DataFrame 是一个二维数据结构。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#DataFrame的维度
print(df.ndim)

输出结果:

2

6) shape

返回一个代表 DataFrame 维度的元组。返回值元组 (a,b),其中 a 表示行数,b 表示列数。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#DataFrame的形状
print(df.shape)
输出结果:

(7, 3)

7) size

返回 DataFrame 中的元素数量。示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#DataFrame的中元素个数
print(df.size)

输出结果:

21

8) values

以 ndarray 数组的形式返回 DataFrame 中的数据。

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#DataFrame的数据
print(df.values)

输出结果:

[[‘c语言中文网’ 5 4.23]
[‘编程帮’ 6 3.24]
[‘百度’ 15 3.98]
[‘360搜索’ 28 2.56]
[‘谷歌’ 3 3.2]
[‘微学苑’ 19 4.6]
[‘Bing搜索’ 23 3.8]]

9) head()&tail()查看数据

如果想要查看 DataFrame 的一部分数据,可以使用 head() 或者 tail() 方法。其中 head() 返回前 n 行数据,默认显示前 5 行数据。示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#获取前3行数据
print(df.head(3))

输出结果:

Name years Rating
0 c语言中文网 5 4.23
1 编程帮 6 3.24
2 百度 15 3.98

tail() 返回后 n 行数据,示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘c语言中文网’,‘编程帮’,“百度”,‘360搜索’,‘谷歌’,‘微学苑’,‘Bing搜索’]),
‘years’:pd.Series([5,6,15,28,3,19,23]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
#构建DataFrame
df = pd.DataFrame(d)
#获取后2行数据
print(df.tail(2))

输出结果:

Name years Rating
5 微学苑 19 4.6
6 Bing搜索 23 3.8

10) shift()移动行或列

如果您想要移动 DataFrame 中的某一行/列,可以使用 shift() 函数实现。它提供了一个periods参数,该参数表示在特定的轴上移动指定的步幅。

shif() 函数的语法格式如下:

DataFrame.shift(periods=1, freq=None, axis=0)

参数说明如下:

参数名称说明
peroids类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值为1。
freq日期偏移量,默认值为None,适用于时间序。取值为符合时间规则的字符串。
axis如果是 0 或者 “index” 表示上下移动,如果是 1 或者 “columns” 则会左右移动。
fill_value该参数用来填充缺失值。

该函数的返回值是移动后的 DataFrame 副本。下面看一组简单的实例:

import pandas as pd
info= pd.DataFrame({‘a_data’: [40, 28, 39, 32, 18],
‘b_data’: [20, 37, 41, 35, 45],
‘c_data’: [22, 17, 11, 25, 15]})
#移动幅度为3
info.shift(periods=3)

输出结果:

a_data b_data c_data
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 40.0 20.0 22.0
4 28.0 37.0 17.0

下面使用 fill_value 参数填充 DataFrame 中的缺失值,如下所示:

import pandas as pd
info= pd.DataFrame({‘a_data’: [40, 28, 39, 32, 18],
‘b_data’: [20, 37, 41, 35, 45],
‘c_data’: [22, 17, 11, 25, 15]})
#移动幅度为3
print(info.shift(periods=3))
#将缺失值和原数值替换为52
info.shift(periods=3,axis=1,fill_value= 52)

输出结果:

原输出结果:
a_data b_data c_data
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 40.0 20.0 22.0
4 28.0 37.0 17.0

替换后输出:
a_data b_data c_data
0 52 52 52
1 52 52 52
2 52 52 52
3 52 52 52
4 52 52 52

注意:fill_value 参数不仅可以填充缺失值,还也可以对原数据进行替换。

Pandas Panel三维数据结构

Panel 结构也称“面板结构”,它源自于 Panel Data 一词,翻译为“面板数据”。如果您使用的是 Pandas 0.25 以前的版本,那么您需要掌握本节内容,否则,作为了解内容即可。

自 Pandas 0.25 版本后, Panel 结构已经被废弃。

Panel 是一个用来承载数据的三维数据结构,它有三个轴,分别是 items(0 轴),major_axis(1 轴),而 minor_axis(2 轴)。这三个轴为描述、操作 Panel 提供了支持,其作用介绍如下:

  • items:axis =0,Panel 中的每个 items 都对应一个 DataFrame。
  • major_axis:axis=1,用来描述每个 DataFrame 的行索引。
  • minor_axis:axis=2,用来描述每个 DataFrame 的列索引。

pandas.Panel()

您可以使用下列构造函数创建一个 Panel,如下所示:

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

参数说明如下:

参数名称描述说明
data输入数据,可以是 ndarray,Series,列表,字典,或者 DataFrame。
itemsaxis=0
major_axisaxis=1
minor_axisaxis=2
dtype每一列的数据类型。
copy默认为 False,表示是否复制数据。

创建Panel 对象

下面介绍创建 Panel 对象的两种方式:一种是使用 nadarry 数组创建,另一种使用 DataFrame 对象创建。首先,我们学习如何创建一个空的 Panel 对象。

1) 创建一个空Panel

使用 Panel 的构造函数创建,如下所示:

import pandas as pd
p = pd.Panel()
print§

输出结果:

<class ‘pandas.core.panel.Panel’>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None

2) ndarray三维数组创建

import pandas as pd
import numpy as np
#返回均匀分布的随机样本值位于[0,1)之间
data = np.random.rand(2,4,5)
p = pd.Panel(data)
print §

输出结果:

<class ‘pandas.core.panel.Panel’>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4

请注意与上述示例的空 Panel 进行对比。

3) DataFrame创建

下面使用 DataFrame 创建一个 Panel,示例如下:

import pandas as pd
import numpy as np
data = {‘Item1’ : pd.DataFrame(np.random.randn(4, 3)),
‘Item2’ : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print§

输出结果:

Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2

Panel中选取数据

如果想要从 Panel 对象中选取数据,可以使用 Panel 的三个轴来实现,也就是itemsmajor_axisminor_axis。下面介绍其中一种,大家体验一下即可。

1) 使用 items选取数据

示例如下:

import pandas as pd
import numpy as np
data = {‘Item1’:pd.DataFrame(np.random.randn(4, 3)),
‘Item2’:pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print(p[‘Item1’])

输出结果:

0 1 2
0 0.488224 -0.128637 0.930817
1 0.417497 0.896681 0.576657
2 -2.775266 0.571668 0.290082
3 -0.400538 -0.144234 1.110535

上述示例中 data,包含了两个数据项,我们选择了 item1,输出结果是 4 行 3 列的 DataFrame,其行、列索引分别对应 major_axis 和 minor_axis。

Python Pandas描述性统计

描述统计学(descriptive statistics)是一门统计学领域的学科,主要研究如何取得反映客观现象的数据,并以图表形式对所搜集的数据进行处理和显示,最终对数据的规律、特征做出综合性的描述分析。Pandas 库正是对描述统计学知识完美应用的体现,可以说如果没有“描述统计学”作为理论基奠,那么 Pandas 是否存在犹未可知。下列表格对 Pandas 常用的统计学函数做了简单的总结:

函数名称描述说明
count()统计某个非空值的数量。
sum()求和
mean()求均值
median()求中位数
mode()求众数
std()求标准差
min()求最小值
max()求最大值
abs()求绝对值
prod()求所有数值的乘积。
cumsum()计算累计和,axis=0,按照行累加;axis=1,按照列累加。
cumprod()计算累计积,axis=0,按照行累积;axis=1,按照列累积。
corr()计算数列或变量之间的相关系数,取值-1到1,值越大表示关联性越强。

从描述统计学角度出发,我们可以对 DataFrame 结构执行聚合计算等其他操作,比如 sum() 求和、mean()求均值等方法。

在 DataFrame 中,使用聚合类方法时需要指定轴(axis)参数。下面介绍两种传参方式:

  • 对行操作,默认使用 axis=0 或者使用 “index”;
  • 对列操作,默认使用 axis=1 或者使用 “columns”。

axis轴示意图
图1:axis轴示意图

从图 1 可以看出,axis=0 表示按垂直方向进行计算,而 axis=1 则表示按水平方向。下面让我们创建一个 DataFrame,使用它对本节的内容进行演示。

创建一个 DataFrame 结构,如下所示:

import pandas as pd
import numpy as np
#创建字典型series结构
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df)

输出结果:

Name Age Rating
0 小明 25 4.23
1 小亮 26 3.24
2 小红 25 3.98
3 小华 23 2.56
4 老赵 30 3.20
5 小曹 29 4.60
6 小陈 23 3.80
7 老李 34 3.78
8 老王 40 2.98
9 小冯 30 4.80
10 小何 51 4.10
11 老张 46 3.65

sum()求和

在默认情况下,返回 axis=0 的所有值的和。示例如下:

import pandas as pd
import numpy as np
#创建字典型series结构
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#默认axis=0或者使用sum(“index”)
print(df.sum())

输出结果:

Name 小明小亮小红小华老赵小曹小陈老李老王小冯小何老张
Age 382
Rating 44.92
dtype: object

注意:sum() 和 cumsum() 函数可以同时处理数字和字符串数据。虽然字符聚合通常不被使用,但使用这两个函数并不会抛出异常;而对于 abs()、cumprod() 函数则会抛出异常,因为它们无法操作字符串数据。

下面再看一下 axis=1 的情况,如下所示:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#也可使用sum(“columns”)或sum(1)
print(df.sum(axis=1))

输出结果:

0 29.23
1 29.24
2 28.98
3 25.56
4 33.20
5 33.60
6 26.80
7 37.78
8 42.98
9 34.80
10 55.10
11 49.65
dtype: float64

mean()求均值

示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.mean())

输出结果:

Age 31.833333
Rating 3.743333
dtype: float64

std()求标准差

返回数值列的标准差,示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.std())

输出结果:

Age 13.976983
Rating 0.661628
dtype: float64

标准差是方差的算术平方根,它能反映一个数据集的离散程度。注意,平均数相同的两组数据,标准差未必相同。

数据汇总描述

describe() 函数显示与 DataFrame 数据列相关的统计信息摘要。示例如下:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

s([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
#也可使用sum(“columns”)或sum(1)
print(df.sum(axis=1))

输出结果:

0 29.23
1 29.24
2 28.98
3 25.56
4 33.20
5 33.60
6 26.80
7 37.78
8 42.98
9 34.80
10 55.10
11 49.65
dtype: float64

mean()求均值

示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.mean())

输出结果:

Age 31.833333
Rating 3.743333
dtype: float64

std()求标准差

返回数值列的标准差,示例如下:

import pandas as pd
import numpy as np
d = {‘Name’:pd.Series([‘小明’,‘小亮’,‘小红’,‘小华’,‘老赵’,‘小曹’,‘小陈’,
‘老李’,‘老王’,‘小冯’,‘小何’,‘老张’]),
‘Age’:pd.Series([25,26,25,23,59,19,23,44,40,30,51,54]),
‘Rating’:pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
df = pd.DataFrame(d)
print(df.std())

输出结果:

Age 13.976983
Rating 0.661628
dtype: float64

标准差是方差的算术平方根,它能反映一个数据集的离散程度。注意,平均数相同的两组数据,标准差未必相同。

数据汇总描述

describe() 函数显示与 DataFrame 数据列相关的统计信息摘要。示例如下:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-w37ZLIlO-1712980024109)]
[外链图片转存中…(img-e7zfOMmm-1712980024110)]
[外链图片转存中…(img-l6znK22j-1712980024111)]
[外链图片转存中…(img-kACfZbqU-1712980024111)]
[外链图片转存中…(img-08sMwyvR-1712980024112)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-gP12JjfX-1712980024112)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/853063
推荐阅读
相关标签
  

闽ICP备14008679号