Pandas学习-基础

文章目录

  • **Pandas学习-基础**
    • 1、Pandas介绍
    • 2、Pandas安装
    • 3、Pandas基础数据结构
      • 3.1、pandas数据结构介绍
        • Series介绍
        • **Series创建**
      • 3.2、Series创建方法
      • 3.3、Series的基本使用
        • 1、通常使用列表或者字典形式进行创建Series对象,可迭代类型均可以创建;
        • 2、索引默认为range(0,n)可以通过index指定索引
        • 3、数据类型根据data自动调整,但是也可以通过dtype指定
        • 4、使用name参数设置数组名称
        • 除此之外还可以使用Numpy的数组函数。
      • 3.4、Seriesd的索引与值
        • 3.4.1注意:
      • 3.5、Series索引与切片
        • 3.5.1、索引切片取值
          • 没有共同索引时,则全部为NaN
          • index取值
          • 索引取值
          • 标签取值
          • 多个数据选取
          • 下标切片
          • 标签切片
          • 布尔索引
      • 3.6、Seires运算
        • 1、head()
        • 2、tail()
        • 3、检测缺失值
    • 4、DataFrame()的创建使用
      • 4.1、DataFrame介绍
      • 4.2、DataFrame创建
        • 4.2.1、通过字典创建DataFrame
        • 4.2.2、通过数组创建DataFrame
        • 4.2.3、通过列表嵌套字典/数组创建DataFrame
      • 4.3、重置索引
        • 1、重复索引值类型一
        • 2、重复索引值类型二
        • 3、重命名索引
      • 4.4、DataFrame基础操作
      • 4.5、DataFrame查数据(索引与切片)
        • 1、行查找的索引方法
        • 2、列查找的索引方法
        • 3、连续范围选取
        • 4、具体行、列取值
      • 4.6、使用loc以及iloc查询数据
        • 1、loc()具体使用方法
      • 4.7、DataFrame修改数据
        • 1、修改列元素
        • 2、修改行元素
      • 4.8、DataFrame新增数据
        • 4.8.1、新增列
        • 4.8.2、插入列
        • 4.8.3、添加行
          • 1、df.loc[]添加
          • 2、df.append(df2)添加
      • 4.9、DataFrame删除数据
        • 4.9.0、删除操作
          • 1、Series对象删除
          • 2、droop()删除DataFrame对象
        • 4.9.1、DataFrame算术
        • 4.9.2、使用填充值的算术方法
        • 4.9.3、描述性统计的概括和计算
          • **1、构造DataFrame**
          • **2、求和**
          • **3、对每一行元素进行求和运算**
          • **4、求每一行的最大值**
          • **5、向下求和**
          • **6、nan替换为0**
          • **7、one重新赋值,并且删除第二列**
          • **8、diff(算数差值)**
          • **9、df.shift()**
          • **10、查找汇总统计describe()**
          • **11、查看表格信息**
          • 12、apply和applymap
          • 13、选取出数组中每一列/行的最大值,axis=0
        • 4.9.4、DataFrame排序
          • 1、Series默认行升序
          • 2、Series默认列升序
          • 3、DataFrame()排序
        • 4.9.4、DataFrame排序
          • 1、Series默认行升序
          • 2、Series默认列升序
          • 3、DataFrame()排序

1、Pandas介绍

​ Pandas支持大部分Numpy语言风格,特别是常用到的数组函数与广播机制的各种数据处理。但是Numpy更适合处理同质型的数据,Pandas在Numpy的基础上进行深入设计,常用于处理表格或者异质型的这一类数据,具有高效的清洗、处理数据能力。我们经常在数据分析时,用来读取数据集做数据清洗处理,实现快速。

​ Pandas是基于Numpy的一种工具,它提供了高性能的运算,主要是为了解决数据分析任务而创建的,是贯穿整个Python数据分析非常核心的工具。

​ 涉及到的内容:1、Pandas基础,2、数据清洗与准备,3数据聚合与分组,4、时间序列

2、Pandas安装

​ win+R调用dos命令框输入cmd运行,直接pip install pandas。如果下载太慢采用换源安装(这里是清华的源):pip install pandas -i http://pypi.mirrors.ustc.edu.cn/simple/。倘若安装失败换其他源进行安装(阿里云、豆瓣等)。

3、Pandas基础数据结构

3.1、pandas数据结构介绍

3.2、Series创建方法

import numpy as np
import pandas as pd
a = np.array([1,2,3])    # 通过之前numpy进行创建
a   # 打印输出:array([1, 2, 3])
s = pd.Series([1,2,3,4,5])
s# 输出:
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64
type(s)   # 输出s的类型:pandas.core.series.Series
s.index      # RangeIndex(start=0, stop=5, step=1)
# 代表[0:5:1]  从0开始到4,步长为1
s.values # array([1, 2, 3, 4, 5], dtype=int64)
s.dtype      # dtype('int64')

  • 元组创建Series对象
s1 = pd.Series((1,2,3,4,5))
s1 # 输出:
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64
  • 数组创建Series对象
a = np.array([1,2,3])
s2 = pd.Series(a)
s2# 输出
# 0    1
# 1    2
# 2    3
# dtype: int32
# 修改标签(index) 名
s2 = pd.Series(a,index=['a','b','c'])
s2# 输出
# a    1
# b    2
# c    3
# dtype: int32
  • 通过字典创建对象
s3 = pd.Series({'name':'松花','age':'18','sex':'男'})
s3# 输出:
# name    松花
# age     18
# sex      男
# dtype: object
s3 = pd.Series({'name':'松花','age':'18','sex':'男'},inidex=['a','b','c'])
s3     # 显示缺失值,并没有修改其标签,指定以后不能轻易修改,除非是上面那种默认的标签(0,1,2,3)# 输出:
# a    NaN
# b    NaN
# c    NaN
# dtype: object
# 添加标签
s3 = pd.Series({'name':'松花','age':'18','sex':'男'},index=['name','age','sex','class'])
s3    # 多加一个标签,可以加,但是,是一个缺失值# 输出:
# name      松花
# age       18
# sex        男
# class    NaN
# dtype: object

3.3、Series的基本使用

1、通常使用列表或者字典形式进行创建Series对象,可迭代类型均可以创建;
import pandas as pd
pd.Series([1,2,3,4,5,6])    # data为iterable
2、索引默认为range(0,n)可以通过index指定索引
pd.Series([1,2,3,4,5],index=list('abcde'))# 输出:
# a    1
# b    2
# c    3
# d    4
# e    5
# dtype: int64
3、数据类型根据data自动调整,但是也可以通过dtype指定
pd.Series(np.random.randint(1,10,size=5),dtype='float')# 输出:
# 0    6.0
# 1    7.0
# 2    5.0
# 3    7.0
# 4    3.0
# dtype: float64
4、使用name参数设置数组名称
pd.Series(np.random.randint(1,10,size=3),index=list('abc'),name='data_name')# 输出:
# a    6
# b    1
# c    7
# Name: data_name, dtype: int32
除此之外还可以使用Numpy的数组函数。
  • s.dtype—>查看数据类型
  • s.astype()—>修改数据类型
  • s.head(n)—>预览前面n条数据
  • s.tail(n)—>预览后几条数据

但是如果需要显示所有数据,则需要以下代码。但并不建议使用

#显示所有列
pd.set_option('display.max_columns', None)#显示所有行
pd.set_option('display.max_rows', None)#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

3.4、Seriesd的索引与值

  • s.index—>查看索引
  • s.values—>查看值序列
  • s.reset_index(drop=False)—>重置索引
    • drop—>是否删除原索引默认为否
3.4.1注意:
  • 索引对象是不可变的,所以不能单个修改索引

3.5、Series索引与切片

  • s[‘标签’]:通过标签

  • s[‘索引’]:通过索引

  • s.loc(标签):通过标签

  • s.iloc(索引):通过索引


3.5.1、索引切片取值

  • 没有共同索引时,则全部为NaN
s3 = pd.Series(d,index=['name','age','sex','class'])   # 多加一个标签,可以加,但是,是一个缺失值
s3# 输出:
# name      松花
# age       18
# sex        男
# class    NaN
# dtype: object
  • index取值
s3.index # 取出s3中的标签# 输出:
# Index(['name', 'age', 'sex', 'class'], dtype='object')
  • 索引取值
# 取值,位置索引,下标取值
s3[0]# 输出:'松花'
  • 标签取值
# 标签名索引,类似于字典的键值取值
s3['name']# 输出:'松花'
  • 多个数据选取
# 选择多个数据
s3[[0,2]]     # 取到小标为0和2的值# 输出:
# name    松花
# sex      男
# dtype: object
s3[['name','sex']]# 输出:
# name    松花
# sex      男
# dtype: object
  • 下标切片
# 下标切片,左闭右开
s3[0:2]# 输出:
# name    松花
# sex      男
# dtype: object
  • 标签切片
# 标签切片,包含末端数据
s3['name':'sex']# 输出:
# name    松花
# age     18
# sex      男
# dtype: object
s3['name':'class':2]    # 步长为2# 输出:
# name    松花
# sex      男
# dtype: object
  • 布尔索引
上述s2输出为:
a    1
b    2
c    3
dtype: int32
# 布尔索引
s2>2# 输出:
# a    False
# b    False
# c     True
# dtype: bool

这里将s2中大于2的元素进行判断,大于返回True,将该值s2[s2>2]则输出大于2的数

s2[s2>2]# 输出:
# c    3
# dtype: int32

属性

# 属性
s2.name = '人数'   # 对象名称
s2.index.name = '班级'     # 索引对象名称
s2# 输出:
# 班级
# a    1
# b    2
# c    3
# Name: 人数, dtype: int32

3.6、Seires运算

s2的结果:
班级
a    1
b    2
c    3
Name: 人数, dtype: int32

1、head()
# 前几条数据   默认为5   要显示几个数值就放几个数值
s2.head()# 输出:
# 班级
# a    1
# b    2
# c    3
# Name: 人数, dtype: int32
2、tail()
# 显示后几条数据
s2.tail(2)# 输出:
# 班级
# b    2
# c    3
# Name: 人数, dtype: int32

3、检测缺失值
s3name      松花
age       18
sex        男
class    NaN
dtype: object
# 检测缺失值
s3.isnull()        # NaN数值返回True# 输出:
# name     False
# age      False
# sex      False
# class     True
# dtype: bool
~s3.notnull()    # 也用于检测缺失值# 输出:
# name     False
# age      False
# sex      False
# class     True
# dtype: bool


4、DataFrame()的创建使用

4.1、DataFrame介绍

DataFrame表示的是矩阵的数据表,它包含已经排序的列集合,每一列可以是不同的值类型(数值、字符串、布尔值)。在DtatFrame中,数据被存储为一个以上的二维块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auUAYyCZ-1658308305490)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170137684.png)]

4.2、DataFrame创建

pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=Flae)

  • data:创建数组的数据,可以为ndarray,dict
  • index: 指定索引
  • dtype:数组数据类型
  • copy:是否拷贝
4.2.1、通过字典创建DataFrame
# 字典创建
data = {'A':[1,2,3],'B':(4,5,6),'C':np.arange(7,10)
}
df = pd.DataFrame(data)
df

执行后的结果为:

A B C
0 1 4 7
1 2 5 8
2 3 6 9

查看数据类型:

type(df) # pandas.core.frame.DataFrame

行索引:

df.index         # 行索引,每一行的名称# 打印输出:RangeIndex(start=0, stop=3, step=1)

列索引:

df.columns       # 每一行的名称# 打印输出:Index(['A', 'B', 'C'], dtype='object')

拿到值:

df.values        # 对所有数值进行取值# 打印输出:
array([[1, 4, 7],[2, 5, 8],[3, 6, 9]], dtype=int64)

对于上述中的df而言可以对行和列标签进行命名:

df = DataFrame(data,index=list('abc'),columns=list('ABC'))        # 这里可以写index=['a','b','c']形式
df      # 结果显示行标签由默认的0,1,2变为a,b,c

执行后的结果:

B A C
a 4 1 7
b 5 2 8
c 6 3 9

注意:DataFrame()创建数组时,第一位置是数据,第二位置是每一行的标签,第三位置是每一列的标签

1、创建DataFrame数组有NaN时会使得该组数值为float类型

data = {'a':pd.Series(np.arange(3)),'b':pd.Series(np.arange(3,5))     # 取不到5
}
df2 = pd.DataFrame(data)       # 由于a能取到0,1,2;b只能取到3,4,因此第3行2列默认为NaN
df2

执行结果:

a b
0 0 3.0
1 1 4.0
2 2 NaN

2字典key位置是列标签,value位置是行标签

data = {'a':{'apple':3.6,'banana':5.6},'b':{'apple':3,'banana':5},'c':{'apple':3.2}
}
df3 = pd.DataFrame(data)
df3

执行结果:

a b c
apple 3.6 3 3.2
banana 5.6 5 NaN
4.2.2、通过数组创建DataFrame
  • 1、首先通过numpy创建数组拿到数组元素

    arr = np.arange(12).reshape(3,4)
    arr     # 创建0-11的数字,并且划分为3行4列# 打印输出:
    array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
    
  • 2、将arr装换为DataFrame

    df4 = pd.DataFrame(arr)
    df4
    

    执行结果为:

    0 1 2 3
    0 0 1 2 3
    1 4 5 6 7
    2 8 9 10 11
  • 3、对上述创建的df4进行处理行标签和列标签:

    df5 = pd.DataFrame(arr,index=list('abc'),columns=list('ABCD'))
    df5             # 实现行标签为abc,列标签为ABCD
    

    执行结果为:

    A B C D
    a 0 1 2 3
    b 4 5 6 7
    c 8 9 10 11
4.2.3、通过列表嵌套字典/数组创建DataFrame
  • 列表嵌套字典

    data = [{'apple':3.6,'banana':5.6},{'apple':5,'banana':3},{'apple':3.2}]
    df6 = pd.DataFrame(data)
    df6
    

    执行结果为:

    apple banana
    0 3.6 5.6
    1 5.0 3.0
    2 3.2 NaN
  • 列表嵌套数组创建DataFrame

    data = [pd.Series(np.arange(3)),pd.Series(np.arange(3,6))]           # 构造行为0-3和3-5数字,列为2的数组
    df7 = pd.DataFrame(data)       # 将数组转换为DataFrame类型
    df7
    

    执行结果:

    0 1 2
    0 0 1 2
    1 3 4 5

4.3、重置索引

除了创建时可以指定,我们创建后还可以通过**df.reindex()**进行重置索引。

  • df.reindex(index=None,columns=None,axis=None,fill_value=nan)
1、重复索引值类型一

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MO7AJYyy-1658308305491)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170311230.png)]

2、重复索引值类型二

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3vG9rmsa-1658308305492)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\2022-07-07_101041.png)]

3、重命名索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63nbbmEN-1658308305492)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170411644.png)]

4.4、DataFrame基础操作

  • df.shape # 查看数组形状,返回值为元组
  • df.dtype # 查看列数据类型
  • df.ndim # 数据维度,返回为整数
  • df.index # 行索引
  • df.columns # 列索引
  • df.values # 值
  • d.head(n) # 显示头部几行,默认前5行
  • d.tail(n) # 显示末尾几行,默认后5行
  • d.info() # 相关信息概述
data = [{"name":"amy","age":18,"tel":10086},{"name":"bob","age":18},{"name":"james","tel":10086},{"name":"zs","tel":10086},{"name":"james","tel":10086},{"name":"ls","tel":10086},
]d2 = pd.DataFrame(data)
d2.head()
d2.tail()
d2.info()  # 输出:
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 3 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----  0   name    6 non-null      object 1   age     2 non-null      float642   tel     5 non-null      float64
dtypes: float64(2), object(1)
memory usage: 272.0+ bytes
'''

4.5、DataFrame查数据(索引与切片)

直接使用索引与标签

类型 描述
df[:索引]或者df[:“标签”] 表达对行操作
df[“列标签”]或者df[[“列标签”,“列标签”]] 表示对列进行操作

创建如下表格数组:

A B C
a 0 1 2
b 3 4 5
c 6 7 8
1、行查找的索引方法

方法1:

df[:'a']

执行结果:拿到第一行元素

A B C
a 0 1 2

方法2:

注意:

当使用 df[:0]时我们会发现,它只是拿到了列的标签:

A B C

当使用 df[:1]时,可以拿到第一行元素:

A B C
a 0 1 2

2、列查找的索引方法

查找列数据,直接利用df[‘列标签’]

# 查找A列
df['A']# 执行结果:
a    0
b    3
c    6
Name: A, dtype: int32

查找A列第一个元素:df['A']['a']

df['A']['a']
df# 执行结果:
0

df[[“列标签”,“列标签”]]—>选取两行元素及更多组列数据时要用两个方括号df[['A','B']],执行结果如下所示:

 A   B
a   0   1
b   3   4
c   6   7

在实际操作当中,我们更加喜欢使用 df['列标签']拿到列所在的值,但是在拿行标签时很少用 df[:'行标签']或者df[:索引],一般使用 df.loc[]df.iloc[] 拿取数据。


3、连续范围选取
  • 1、创建数组
A G B C d
a 0 1 1 2 999
b 3 2 4 5 999
c 6 3 7 8 999
d 1 2 3 4 5
  • 2、获取a到c行元素,以及c到d列元素
# 获取a-c行元素和C-D列元素
df.loc['a':'c','C':'d']

执行结果:

C d
a 2 999
b 5 999
c 8 999

3、下标取值,切片操作

# 连续取值
df.iloc[0:3,3:5]

执行结果:

C d
a 2 999
b 5 999
c 8 999
4、具体行、列取值
# 取值1到3行数据,在取值第2、4列
df.iloc[0:3,[1,3]]

执行结果:

G C
a 1 2
b 2 5
c 3 8

4.6、使用loc以及iloc查询数据

  • df.loc[] # 通过轴标签选择数据
  • df.iloc[] # 通过整数索引选择数据

具体使用如下

类型 描述
df.loc[val] 根据标签索引选择DataFrame的单行或者多行
df.loc[:,val] 根据标签索引选择DataFrame的单列或者多行
df.loc[val1,val2] 同时选择行和列中的一部分
df.iloc[where] 根据位置索引选择DataFrame的单行或者多行
df.iloc[:,where] 根据位置索引选择DataFrame的单列或者多列
df.iloc[where_i,where_j] 根据位置索引选择行和列
1、loc()具体使用方法

创建数组列表如下:

A B C
a 0 1 2
b 3 4 5
c 6 7 8
# 高级索引
df.loc['a']        # 行索引

执行结果:

A    0
B    1
C    2
Name: a, dtype: int32

补充:df.T['a']也可以得到同样的行数据。

获取多行df.loc[['a','b']]需要两个方括号

效果如下:

A B C
a 0 1 2
b 3 4 5

4.7、DataFrame修改数据

修改数据主要遵循以下两点

①:查询数据

②:再赋值

注意: Pandas中可以直接赋值np.nan,并且赋值当前列数据会自动转化为浮点类型。而不是整个数组都转,这主要是因为pandas数据可以是异质性。

创建如下数组:

A B C
a 0 1 2
b 3 4 5
c 6 7 8
1、修改列元素

✔**修改A列元素:**一旦修改后就会破坏原始数据

df['A'] = 9           # 修改A列元素
df

执行结果:

A B C
a 9 1 2
b 9 4 5
c 9 7 8

修改A列第一个元素:

df['A']['a'] = 10     # 选择A列元素,再选择a行元素
df

执行结果:

A B C
a 10 1 2
b 9 4 5
c 9 7 8
2、修改行元素

✔给第一行元素重新赋值

# 给第一行元素重新赋值
df.loc['a'] = [0,1,2]
df

执行结果:

A B C
a 0 1 2
b 3 4 5
c 6 7 8

4.8、DataFrame新增数据

4.8.1、新增列

df[“新的列标签”] = 值

**注意:**添加列,则新添加的值的长度必须与其他列的长度保持一致,否则会报错。

构造数组如下:

A B C
a 0 1 2
b 3 4 5
c 6 7 8
# 新增加一列
df['D'] = [9,99,999]
df

执行结果:

A B C D
a 0 1 2 9
b 3 4 5 99
c 6 7 8 999
4.8.2、插入列

如果需要在数据中插入列,则使用 df.insert(loc,column,value)

  • loc 为插入列的位置
  • column 为插入列的标签
  • value 为插入列的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djGaR6S3-1658308305493)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170521231.png)]

4.8.3、添加行

df.loc[“新的行标签”,:] = 值

如果增加的这一行元素不是4个,那么就会报错。

1、df.loc[]添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6B5UqwXB-1658308305494)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170548371.png)]

2、df.append(df2)添加

除此之外,我们还可以通过 df.append(df2) 方法添加行,但是类似于数组与数组的堆叠拼接。所以df2的列索引必须同df一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lIYHRKDs-1658308305494)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170617641.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NUEkVOXI-1658308305494)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170644962.png)]

4.9、DataFrame删除数据

4.9.0、删除操作
1、Series对象删除

对于常规的Series对象而言,如:

a     0
b     1
c     2
d     3
f     9
g    10
dtype: int64

删除f行元素:

del s['f']
s
2、droop()删除DataFrame对象

构造如下df2数组:

A G B C d
a 0 1 1 2 999
b 3 2 4 5 999
c 6 3 7 8 999
d 1 2 3 4 5
a 0 1 1 2 999
  • 指定删除列

    df3 = df2.drop(['C','d'],axis=1)     # 指定删除C,d两列
    df3
    
    A G B
    a 0 1 1
    b 3 2 4
    c 6 3 7
    d 1 2 3
    a 0 1 1
  • 指定删除行

    df4 = df2.drop(['d','a'],axis=0)      # 删除d,a行
    df4
    
    A G B C d
    b 3 2 4 5 999
    c 6 3 7 8 999
4.9.1、DataFrame算术

实际上,我们通过 + - * / // **等以上符号可以直接对DataFrame与DataFrame之间或者DataFrame以及Series之间进行运算。但是秉承的原则就是对应索引运算,存在索引不同时,返回结果为索引对的并集。

经过我们实际操作不难发现,当存在索引不同时,返回的值会自动填充NaN

4.9.2、使用填充值的算术方法
方法 描述
add,radd 加法(+)
sub,rsub 减法(-)
div,rdiv 除法(/)
floordiv,rfloordiv 整除(//)
mul,rmul 乘法(*)
pow.rpow 幂次方(**)

注意:

  • Series使用算术方法,不支持指定填充值

4.9.3、描述性统计的概括和计算
方法 描述
count 非NA值的个数
min,max 最小值,最大值
idxmin,idxmax 最小值,最大值的标签索引
sum 求和
mead 平均值
median 中位数
var 方差
std 标准差
cumsum 累计值
cummin,cummax 累计值的最小值或者最大值
cumprod 值的累计积
diff 计算第一个算术差值(时间序列)
pct_change 百分比
corr 按索引对其的值的相关性
cov 协方差
1、构造DataFrame
df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=('abcd'),columns = ('one','two'))
df

执行结果:

one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3

2、求和
df.sum()     # 对所有数据进行求和# 执行结果:
one    9.25
two   -5.80
dtype: float64
# 由以上执行结果可知对所有列数据进行求和运算

3、对每一行元素进行求和运算
df.sum(axis=1)          # 每一行的元素进行求和# 执行结果:
a    1.40
b    2.60
c    0.00
d   -0.55
dtype: float64# df.sum(axis=0)         # 每一列的元素进行求和

4、求每一行的最大值
df.max(axis=1)          # 每一行的最大值# 执行结果为:
a    1.40
b    7.10
c     NaN
d    0.75
dtype: float64

5、向下求和
df.cumsum()              # 上面的数值一次向下累加求和

执行结果:

one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8

6、nan替换为0
df1 = df.fillna(0)
df1

执行结果:

one two
a 1.40 0.0
b 7.10 -4.5
c 0.00 0.0
d 0.75 -1.3

7、one重新赋值,并且删除第二列
df1.one = [0,1,2,3]
df2 = df1.drop(['two',axis=1])      # 删除第二列
df2

执行结果:

one
a 0
b 1
c 2
d 3

通过运算我们发现当涉及到行/列相加运算axis=1代表行axis=0代表列

涉及拼接和删除作为轴axis=1代表列处理,axis=0代表行处理,这样方便记忆了解。

8、diff(算数差值)
df2.diff()                       # 算数差值
# 上下数值之间相差的值,如0和1相差1;1和4相差3
# 下减上的数值

执行结果:

one
a NaN
b 1.0
c 1.0
d 1.0
9、df.shift()
df2-df2.shift(1)
#  效果与{df2.diff()  算数差值}一样,该方法少用,数值广播
# 理解,本身-上一层=diff
one
a NaN
b 1.0
c 1.0
d 1.0
10、查找汇总统计describe()
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3

添加一列‘there’

df['there'] = ['1','2','3','4']           # 添加一列
df

执行结果:

one two there
a 1.40 NaN 1
b 7.10 -4.5 2
c NaN NaN 3
d 0.75 -1.3 4

​ 查找汇总统计

df.describe()       # 查看df中的数据统计情况

执行结果:

one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
11、查看表格信息
df.info# 执行结果:
<bound method DataFrame.info of     one  two there
a  1.40  NaN     1
b  7.10 -4.5     2
c   NaN  NaN     3
d  0.75 -1.3     4>

对上述中添加there的df进行处理为float

df['there'] = df.there.astype(float)    # 处理为浮点型
df.info         # 查看表格信息# 执行结果:
<bound method DataFrame.info of     one  two  there
a  1.40  NaN    1.0
b  7.10 -4.5    2.0
c   NaN  NaN    3.0
d  0.75 -1.3    4.0>
12、apply和applymap
df['there'] = pd['there'].apply(lambda x:int())
df.info         # 处理为int类型# 执行结果为:
<bound method DataFrame.info of     one  two  there
a  1.40  NaN      0
b  7.10 -4.5      0
c   NaN  NaN      0
d  0.75 -1.3      0>
13、选取出数组中每一列/行的最大值,axis=0
df1 = pd.DataFrame(np.random.randn(5,4))
df1

执行结果为:

0 1 2 3
0 0.321094 -0.204748 0.391695 -0.521649
1 -1.062381 -0.121107 0.751911 2.560299
2 -0.446993 0.546464 0.342765 0.059072
3 0.447356 0.928174 -1.160135 -1.178226
4 -0.997779 -1.837331 -1.876287 -1.685492
df1.apply(lambda x:x.max())   # 选取出每一列的最大值,axis=0# 执行结果:
0    0.447356
1    0.928174
2    0.751911
3    2.560299
dtype: float64
df1.apply(lambda x:x.max(),axis=1)    # 每一行的最大值,axis=1# 执行结果:
0    0.391695
1    2.560299
2    0.546464
3    0.928174
4   -0.997779
dtype: float64
df1.applymap(lambda x:'%.2f'%x)   # 精确度,保留几位小数

执行结果:

0 1 2 3
0 0.32 -0.20 0.39 -0.52
1 -1.06 -0.12 0.75 2.56
2 -0.45 0.55 0.34 0.06
3 0.45 0.93 -1.16 -1.18
4 -1.00 -1.84 -1.88 -1.69
4.9.4、DataFrame排序
  • df.sort_index(axis=0,ascending=True) # 索引排序

    • axis指定轴,默认为0轴
    • ascending为排序方式,默认为True表示升序
  • df.sort_values(by) # 值排序
    • by指定一列或者多列作为排序键
1、Series默认行升序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVDxU19h-1658308305495)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170814018.png)]

  • 降序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFN92AT8-1658308305496)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170846162.png)]

2、Series默认列升序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-As2YV61T-1658308305496)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\image-20220720170929526.png)]

3、DataFrame()排序
  • 构造df1数组

    B C A
    b 0 1 2
    d 3 4 5
    c 6 7 8
    a 9 10 11
  • 行标签排序

    df1.sort_index()
    # 默认axis=0
    

    执行结果:

    B C A
    a 9 10 11
    b 0 1 2
    c 6 7 8
    d 3 4 5
  • 列标签排序

    df1.sort_index(axis=1)
    

    执行结果:

    A B C
    b 2 0 1
    d 5 3 4
    c 8 6 7
    a 11 9 10
  • 某一行排序

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xr46prfa-1658308305497)(C:\Users\86152\Desktop\文件笔记\pandas学习基础\2022-07-07_103446.png)]

注意:

  • by = [col1,col2] 是先给col1排序,当col1有相同值时,col2中按排序顺序再排序

函数应用于映射

  • df.apply(func,axis=0) # 通过apply将函数运用到列 或者 行
  • df.applymap(func) # applymap将函数应用到每个数据上
    | -0.20 | 0.39 | -0.52 |
    | 1 | -1.06 | -0.12 | 0.75 | 2.56 |
    | 2 | -0.45 | 0.55 | 0.34 | 0.06 |
    | 3 | 0.45 | 0.93 | -1.16 | -1.18 |
    | 4 | -1.00 | -1.84 | -1.88 | -1.69 |
4.9.4、DataFrame排序
  • df.sort_index(axis=0,ascending=True) # 索引排序

    • axis指定轴,默认为0轴
    • ascending为排序方式,默认为True表示升序
  • df.sort_values(by) # 值排序
    • by指定一列或者多列作为排序键
1、Series默认行升序

[外链图片转存中…(img-yVDxU19h-1658308305495)]

  • 降序

[外链图片转存中…(img-kFN92AT8-1658308305496)]

2、Series默认列升序

[外链图片转存中…(img-As2YV61T-1658308305496)]

3、DataFrame()排序
  • 构造df1数组

    B C A
    b 0 1 2
    d 3 4 5
    c 6 7 8
    a 9 10 11
  • 行标签排序

    df1.sort_index()
    # 默认axis=0
    

    执行结果:

    B C A
    a 9 10 11
    b 0 1 2
    c 6 7 8
    d 3 4 5
  • 列标签排序

    df1.sort_index(axis=1)
    

    执行结果:

    A B C
    b 2 0 1
    d 5 3 4
    c 8 6 7
    a 11 9 10
  • 某一行排序

    [外链图片转存中…(img-Xr46prfa-1658308305497)]

注意:

  • by = [col1,col2] 是先给col1排序,当col1有相同值时,col2中按排序顺序再排序

函数应用于映射

  • df.apply(func,axis=0) # 通过apply将函数运用到列 或者 行
  • df.applymap(func) # applymap将函数应用到每个数据上

Pandas学习-基础相关推荐

  1. python数据分析pandas_Python数据分析之pandas学习(基础操作)

    一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组, 除了通吃一维数组可用的函数或方法,而且 ...

  2. pandas库基础学习

    pandas库基础学习 1.Pandas模块的数据结构 Pandas模块的数据结构主要有两种: Series DataFrame Series 是一维数组,基于Numpy的ndarray 结构 Dat ...

  3. Pandas学习(3)——Pandas基础

    本文基于Datawhale提供的Pandas学习资料. 均为本人理解,如有不足或错误地方欢迎补充批评指正,如有侵权,联系速删. 开始学习前,请确认已经安装了 xlrd, xlwt, openpyxl ...

  4. python中 s是什么意思_什么是Pandas?Pandas学习什么?

    pandas数据分析核心工具包,基于numpy构建,为数据分析而存在!具有以下特点: 1.一位数组Series+二维数组Dataframe 2.可直接读取数据做处理 3.兼容各种数据库 4.支持各种分 ...

  5. Python 数据分析与展示笔记4 -- Pandas 库基础

    Python 数据分析与展示笔记4 – Pandas 库基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考 ...

  6. [转载] python学习-基础教程、深度学习

    参考链接: 在Python中使用NLTK对停用词进行语音标记 人工智能学习线路图 Python教程 Python 教程Python 简介Python 环境搭建Python 中文编码Python 基础语 ...

  7. Pandas 学习手册中文第二版:1~5

    原文:Learning pandas 协议:CC BY-NC-SA 4.0 译者:飞龙 一.Pandas 与数据分析 欢迎来到<Pandas 学习手册>! 在本书中,我们将进行一次探索我们 ...

  8. 第3章(3.11~3.16节)模型细节/Kaggle实战【深度学习基础】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  9. 图解Pandas,又一个Pandas学习利器!

    01写在前面 大家好,我是阳哥. Pandas 可以说是 在Python数据科学领域应用最为广泛的工具之一. Pandas是一种高效的数据处理库,它以 dataframe 和 series 为基本数据 ...

最新文章

  1. mysql查看数据库创建语句_mysql-模糊查找数据库和查看数据库的创建语句
  2. 2018湖湘杯海选复赛Writeup
  3. 分布式mysql中间件(mycat)
  4. 数据分析中的可视化-常见图形
  5. idea代码补全_不想得手指关节炎?帮你提炼IDEA常用代码补全操作
  6. Python入门--二重循环中的continue和break
  7. JAVA Map集合类简介
  8. 《BGP设计与实现》一2.10 案例研究:BGP内存的使用评估
  9. SaaS、PaaS、IaaS典型的云计算解决方案架构
  10. raw data/PF data/Q30 data/clean data的不同
  11. windows 密码过期_为什么我的密码在Windows中过期?
  12. 初中英语语法(004)-代词
  13. 计算机个人市场调查实验报告,市场调查实验报告(一).doc
  14. A Density-Based Algorithmfor Discovering Clusters in LargeSpatial Databaseswith Noise(KDD-96)
  15. 华为改变策略,出击超低端手机市场
  16. HashMap、ConcurrentHashMap(1.7、1.8)源码分析 + 红黑树
  17. python学习——函数
  18. 杰理之脑连接样机蓝牙 , 开启音量同步 , 电脑无法大范围 量 调节音量【篇】
  19. 1400㎡,联诚发龙腾LED透明屏点燃五月天新加坡演唱会!
  20. JAVA面试-基础加强与巩固:反射、注解、泛型等

热门文章

  1. 快速获取商品页面原数据【淘宝】
  2. 雨月物語,乌月传说(1953) Ugetsu
  3. 30天自制操作系统——用U盘启动自制系统
  4. 会计学原理学习笔记——第三章——账户与复式记账(3.1资金筹集业务的核算——投入资本的核算)
  5. Windows CE 6.0 for VMWare虚拟机和BSP下载
  6. 前端面试题(waillyer)
  7. 均线颜色怎么区分_5日均线,20日均线怎么分辨呀?颜色还是什 – 手机爱问
  8. 如何只搜索自己博客站的文章
  9. 【数据库】在校田径运动会中设置了各类比赛,每一比赛类别有类别编号、类别名称和主管等属性,每一比赛类别包含很多比赛项目;每一比赛项目有项目编号、项目名称、比赛时间和级别等属性;各个系团队有团编号、团名称
  10. 2.Objection 环境配置,自动化分析和插件