pandas入门

pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas数据类型结构Series和DataFrame是pandas两个主要的数据结构。SeriesSeries是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:import pandas as pd...
摘要由CSDN通过智能技术生成

pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。

pandas数据类型结构

Series和DataFrame是pandas两个主要的数据结构。

Series

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

仅由一组数据即可产生最简单的Series:

import pandas as pd
from pandas import Series,DataFrame
obj = Series([4,7,-5,3])
ob
0    4
1    7
2   -5
3    3
dtype: int64

Series的字符串表现形式为:索引在左边,值在右边。上例没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

可以通过Series 的values和index属性获取其数组表示形式和索引对象:

>>> obj.values
array([ 4,  7, -5,  3], dtype=int64)
>>> obj.index
RangeIndex(start=0, stop=4, step=1)

创建带索引的Series:

>>> obj2 = pd.Series([4,7,-5,3],index=['d','b','a','c'])
>>> obj2
d    4
b    7
a   -5
c    3
dtype: int64

 选取Seriesde中的单个或一组值:

>>> obj2['a']
-5
>>> obj2[['c','a','d']]
c    3
a   -5
d    4
dtype: int64

Numpy数组运算(根据布尔型书进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接:

>>> obj2
d    4
b    7
a   -5
c    3
dtype: int64

>>> obj2[obj2 > 0]
d    4
b    7
c    3
dtype: int64

可以将Series看成是一个定长的有序字典,因为他是索引值到数据值的一个映射 。可以用字典函数:

>>> 'b' in obj2
True

 通过字典创建Series:

sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3 = pd.Series(sdata)
obj3

Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

传入排好序的字典的键改变顺序

states = ['California','Ohio','Oregon','Texas']
obj4 = pd.Series(sdata,index=states)
obj4
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64

上例中,sdata中跟states索引匹配的那3个值会被找出来并放到相应的位置上

“Clifornia”对应的值到不到,结果就是NaN(非数字 not a number)pandas中,NaN表示缺失值或NA值。

pandas的isnull和notnull函数用于检测缺失数据:

pd.isnull(obj4)
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

Series类似的实例方法:

>>> obj4.isnull()
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

Series最重要的一个功能是会根据运算的索引标签自动对齐数据:可以认为是类似Join的操作

>>> obj3
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
>>> obj4
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64
>>> obj3 + obj4
California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

Series对象本身以及其索引都有一个name属性,该属性跟pandas其他关键功能关系非常密切:

obj4.name = 'population'
obj4.index.name = 'state'
obj4

state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

Series索引可以通过赋值的方式就地修改:

>>> obj
0    4
1    7
2   -5
3    3
dtype: int64

obj.index = ['Bob','Steve','Jeff','Ryan']
obj

Bob      4
Steve    7
Jeff    -5
Ryan     3
dtype: int64

DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的序列,每列可以是不同的值类型(数值、字符串、布尔值)

DateFame 既有行索引也有列索引。

DataFrame中的数据是通过一个或多个二维块存放的(而不是列表、字典或别的一维数组结构)

注:虽然DataFrame是以二维结构保存数据的,但仍然可以轻松的将其表示为更高纬度的数据(层次化索引的表格型结构,这是pandas中许多高级处理功能的关键要素)

创建DataFrame

最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
        'year':[2000,2001,2002,2001,2002],
        'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = DataFrame(data)
frame

    state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9

按照制定的序列排序

DataFrame(data,columns=['year','state','pop'])

     year	state	pop
0	2000	Ohio	1.5
1	2001	Ohio	1.7
2	2002	Ohio	3.6
3	2001	Nevada	2.4
4	2002	Nevada	2.9

跟Series一样,如果传入的列在数据中找不到,就会产生NA值:

frame2 = DataFrame(data,columns=['year','state','pop','debt'],
                index = ['one','two','three','four','five'])
frame2
	year	state	pop	debt
one	2000	Ohio	1.5	NaN
two	2001	Ohio	1.7	NaN
three	2002	Ohio	3.6	NaN
four	2001	Nevada	2.4	NaN
five	2002	Nevada	2.9	NaN

>>> frame2.columns
Index(['year', 'state', 'pop', 'debt'], dtype='object')

获取DataFrame列为一个Series:

>>> frame2['state']
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object
>>> frame2.year
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64

注意到返回的Series拥有原DataFrame相同的索引,但其name 属性也被相应的设置好了。

获取一行

frame2.loc['three']
year     2002
state    Ohio
pop       3.6
debt      NaN
Name: three, dtype: object

通过赋值的方式修改列值,可以赋值一个标量或一组值

frame2['debt']=16.5
frame2

year	state	pop	debt
one	2000	Ohio	1.5	16.5
two	2001	Ohio	1.7	16.5
three	2002	Ohio	3.6	16.5
four	2001	Nevada	2.4	16.5
five	2002	Nevada	2.9	16.5

frame2['debt'] = np.arange(5.)
frame2

year	state	pop	debt
one	2000	Ohio	1.5	0.0
two	2001	Ohio	1.7	1.0
three	2002	Ohio	3.6	2.0
four	2001	Nevada	2.4	3.0
five	2002	Nevada	2.9	4.0

将列表或数组赋值给某个列时,其长度必须跟DateFrame的长度匹配。

如果赋值的是一个Series,就会精确匹配到DataFrame的索引,所有的空位都将被填上缺失值

val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt'] = val
frame2

	year	state	pop	debt
one	2000	Ohio	1.5	NaN
two	2001	Ohio	1.7	-1.2
three	2002	Ohio	3.6	NaN
four	2001	Nevada	2.4	-1.5
five	2002	Nevada	2.9	-1.7

创造新列

frame2['eastern'] = frame2.state == 'Ohio'
frame2

	year	state	pop	debt	eastern
one	2000	Ohio	1.5	0.0	True
two	2001	Ohio	1.7	1.0	True
three	2002	Ohio	3.6	2.0	True
four	2001	Nevada	2.4	3.0	False
five	2002	Nevada	2.9	4.0	False

删除列

del  frame2['eastern']
frame2.columns

Index(['year', 'state', 'pop', &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值