栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas用法(pandas入门)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas用法(pandas入门)

目录

Series基础

创建Series

通过索引获取数据

指定Series的索引值

根据索引值读取数据

使用key/value对象(类似字典)来创建Seires

Dataframe基础

使用列表创建Dataframe

使用ndarrays创建Dataframe

使用字典创建Dataframe

根据列索引提取数据列

添加数据列

对原有数据列进行运算获得新数据列

根据列索引删除数据列

使用del删除指定数据列

使用pop方法删除数据列

使用loc和iloc函数对行索引进行操作

使用loc和iloc获取Dataframe的某一行

使用loc和iloc获取Dataframe的某一列

利用loc,iloc提取指定行、指定列数据

利用loc,iolc提取所有数据

利用loc函数提取特定行

利用切片选取特定行

利用append函数添加数据行

利用drop函数删除数据行


Series基础

Series 是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。Series 由索引(index)和列组成,函数语法如下:

pandas.Series( data, index, dtype, name, copy)

data:一组数据

index:数据索引标签(行索引),默认从0开始

dtype:数据类型,默认会自己判断

name:Series的名称

copy:拷贝数据,默认为False(不常用)

创建Series
import pandas as pd


data = ['a','b','c']
my_series = pd.Series(data)
my_series

输出:

0    a
1    b
2    c
dtype: object

通过索引获取数据
my_series[0]

输出:

'a'

指定Series的索引值
import pandas as pd

data  = ['a','b','c']
index = ['first','second','thirdly']
my_series = pd.Series(data,index=index)
my_series

输出:

first      a
second     b
thirdly    c
dtype: object

object为数据类型

根据索引值读取数据
import pandas as pd

data  = ['a','b','c']
index = ['first','second','thirdly']
my_series = pd.Series(data,index=index)
my_series['first']

输出:

'a'

使用key/value对象(类似字典)来创建Seires
import pandas as pd

data = {1:'Google',2:'Runoob',3:'Wiki'}
myvar = pd.Series(data)
myvar

输出:

1    Google
2    Runoob
3      Wiki
dtype: object

按照这种方法将数据转换成Series时,key转换为每列的索引,value转换成每列的值

按照字典创建Series时,可以只将需要的数据转换成Series

import pandas as pd

data = {1:'Google',2:'Runoob',3:'Wiki'}
myvar = pd.Series(data,index=[2,3])
myvar

输出:

2    Runoob
3      Wiki
dtype: object

可以看到只将索引为2,3的数据转换成了Series

Dataframe基础

Dataframe 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。 Dataframe 既有行索引(index)也有列索引(columns),它可以被看做由 Series 组成的字典(共同用一个索引)。

 Record为Dataframe的记录,即一行

 Dataframe可以由Series合成,而Dataframe的每一列都为Series

创建Dataframe的函数语法如下:

pandas.Dataframe(data,index,columns,dtype,copy)

 data:一组数据(ndarray、series、map、lists、dict 等类型)

index:索引值,或者可以称为行标签

columns:列标签,默认为 RangeIndex (0, 1, 2, …, n)

dtype:数据类型,默认会自己判断

copy:拷贝数据,默认为 False(不常用)

使用列表创建Dataframe
import pandas as pd

data = [['Goole',10],
       ['Runoob',12],
       ['Wiki',13]]
df = pd.Dataframe(data,columns=['Site','Age'])
df

输出:

 data列表中的一个列表元素为一行,columns为每一列的列名

 使用dtype参数修改数据类型

import pandas as pd

data = [['Goole',10],
       ['Runoob',12],
       ['Wiki',13]]
df = pd.Dataframe(data,columns=['Site','Age'],dtype=float)
df

输出:

可以看到Age列的数据类型变为了float

使用ndarrays创建Dataframe

ndarray为n维数组

import pandas as pd

data = {'Site':['Google','Runoob','Wiki'],'Age':[10,12,13]}
df = pd.Dataframe(data)
df

输出:

 可以把data作为一个字典嵌套列表,字典中的key为转换为列名,value列表转换为一列中的数据

使用字典创建Dataframe
import pandas as pd

data = [{'a':1,'b':2},{'a':5,'b':10,'c':20}]
df = pd.Dataframe(data)
df

输出:

 data为列表嵌套字典,一个字典代表一行数据,字典中的key为列名,value为该列的值

由于data中第一个字典中缺少c键及其对应的值,故在生成的Dataframe中第0行的c列数据为NaN,Not a Number,非数

data中的数据没有float类型的,但是在生成的Dataframe中,第1行的c列数据为20.0,数据类型为float,这是因为NaN在Python中为float类型的,而dtype参数自动检测,将每一列的数据都转换为同一数据类型,所以c列的数据都被转换为了float类型

根据列索引提取数据列

首先创建一个Dataframe

import pandas as pd

data = {'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(data)
df

输出:


 注意由于第一列的最后一行为NaN,导致该列数据类型全为float

 选取two列

df['two']

输出:

a    1
b    2
c    3
d    4
Name: two, dtype: int64

类型为Series

添加数据列
df['three'] = pd.Series([10,20,30],index=['a','b','c'])
df

输出:

对原有数据列进行运算获得新数据列
df['four'] = df['one'] + df['three']
df

输出:

 可见,four列中每一行的值都为one列和three列对应行的值的加和

根据列索引删除数据列
import pandas as pd

data = [{'a':1,'b':2},{'a':5,'b':10,'c':20}]
df = pd.Dataframe(data)
df

原始数据框:

使用del删除指定数据列
del df['one']

删除后数据框为:

从输出结果可以看出,one列已被删除

使用pop方法删除数据列

语法为:Dataframe.pop(列名)

s = df.pop('one')

输出:

 该结果与使用del方法得到的结果一模一样

pop方法与del最大的茶杯是,使用pop方法删除数据列时,pop会将删除的数据列返回,类型为Series

将s输出:

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

使用loc和iloc函数对行索引进行操作

loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)

iloc函数:通过行号来取行数据(如取第二行的数据)

首先创建一个Dataframe

import numpy as np
import pandas as pd

df = pd.Dataframe(np.arange(16).reshape(4,4),
                   index=list('abcd'),columns=list('ABCD'))
df

输出:

首先使用numpy生成元素为0~15的一维数组

np.arange(16)

输出: 

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

接着使用reshape属性将该一维数组转换为4×4的多维数组

np.arange(16).reshape(4,4)

输出:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

最后将该多维数组作为数据转换为Dataframe

使用loc和iloc获取Dataframe的某一行

获取Dataframe的第一行数据

df.loc['b']
df.iloc[1]

两种方法都获取到了同样的结果:

A    4
B    5
C    6
D    7
Name: b, dtype: int32

该例中,loc与iloc区别就在于loc通过行索引来获取数据,iloc通过行号来获取数据

使用loc和iloc获取Dataframe的某一列

获取Dataframe的第一列数据

df.loc[:,['A']]
df.iloc[:,[0]]

两种方法都获取到了同样的结果:

在这里使用了切片 : [行开始:行结束:步长,列开始:列结束:步长]

逗号前面时行选择,逗号后面时列选择

 loc使用切片时,除了步长,行开始、列开始...都必须为index/columns

iloc使用切片时,除了步长,行开始、列开始...都必须为行号,列号

df.loc['a':'d':2,['A']]

输出:

df.loc[['a'],'A':'D':2]

输出:

 当行或列选择中有一个仅为一个index/columns而且不是列表数据时,输出Series

df.loc['a':'d':2,'A']

输出:

a    0
c    8
Name: A, dtype: int32
df.loc['a','A':'D':2]

输出:

A    0
C    2
Name: a, dtype: int32

当行选择和列选择都为一个index/columns时,定位到Dataframe中的一个数据

df.loc['a','A']

输出:

0

使用iloc函数时,情况与loc类似,只是将行选择和列选择中的index/columns改为了行号和列号

df.iloc[0:3:2,[0]]

输出:

df.iloc[[0],0:3:2]

输出:

df.iloc[0:3:2,0]

输出:

a    0
c    8
Name: A, dtype: int32
df.iloc[0,0:3:2]

输出:

A    0
C    2
Name: a, dtype: int32
df.iloc[0,0]

输出:

0

另外还有两种方法获取Dataframe中的指定列

df.A
df['A']

两者输出数据的类型均为Serise

a     0
b     4
c     8
d    12
Name: A, dtype: int32

要想输出的数据为Dataframe类型,要用双中括号

df[['A']]

df[['A','B']]

 

利用loc,iloc提取指定行、指定列数据

提取index为'a','b',列为'A','B'的数据

df.loc[['a','b'],['A','B']]

 逗号前的中括号为index,逗号后的中括号为'A','B'

 提取行号为0,1,列号为0,1的数据

df.iloc[[0,1],[0,1]]

  逗号前的中括号为行号,逗号后的中括号为列号

两者均输出:

利用loc,iolc提取所有数据
df.loc[::]
df.iloc[::]

两者均输出:

利用loc函数提取特定行

提取A列中数据为0的行

df.loc[df['A']==0]

输出:

结果数据类型为Dataframe

使用loc函数时,可以指定index,将指定的index数据行提取出来

优点是:如果index是人名,数据框为所有人的数据,那么我可以将某个人的多条数据提取出来分析

缺点是:如果index不具有特定意义,而且重复,那么提取的数据需要进一步处理

利用切片选取特定行

选取第2,3行(行数从0开始)的数据

df[2:4]

输出:

 切片经典左闭右开,结果数据类型为Dataframe

注意,使用切片时,只允许行切片,不允许列切片

如果将切片像loc,iloc函数一样操作,就会报错,如:

df[2:4,0:2]

报错:

利用append函数添加数据行

创建两个数据框:

import pandas as pd

df1 = pd.Dataframe([[1,2],[3,4]],columns=['a','b'])
df2 = pd.Dataframe([[5,6],[7,8]],columns=['a','b'])

使用append在df1行末尾追加新的数据行

df1 = df1.append(df2)
df1

输出:

注意到index仍为原来各自数据框的index 

这里生成的新的数据框,index重复不具有特殊含义,如使用,还需进一步处理

利用drop函数删除数据行
df1 = df1.drop(0)
df1

drop函数中的参数指定删除所有index为该参数的数据行

输出:

由于df1中有两个数据行的index都为0,故删除了两条数据行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号