CHAPTER 5 Pandas 入门

本文介绍了Pandas的入门知识,包括Series和DataFrame两种主要数据结构。Series是一维数组,允许通过标签进行索引;DataFrame是二维表格型数据结构,具有行和列索引。内容涵盖数据选择、过滤、算术运算、排序和统计计算等基本功能,展示了Pandas在数据处理中的灵活性和便利性。
摘要由CSDN通过智能技术生成

CHAPTER 5 Pandas 入门

5.1pandas数据结构介绍 Getting Started with pandas¶

In [5]:
import pandas as pd
In [7]:
from pandas import Series, DataFrame

5.1.1 Series

Series是一种一维的数组类型对象,它包含了一个值序列,并且包含了数据标签,称为索引。最简单的序列可以仅仅由一个数组组成

In [49]:
series_01=pd.Series([4,7,-5,3])
series_01
Out[49]:
0    4
1    7
2   -5
3    3
dtype: int64

交互式环境中Series的字符串表示,索引(index/rows)在左边,值(values/colums/variables)在右边。索引的默认从0到N-1(N是数据的长度)

In [50]:
series_01.values   #values获取对象的值
Out[50]:
array([ 4,  7, -5,  3], dtype=int64)
In [51]:
series_01.index #与range(4)类似,index获取对象的索引
Out[51]:
RangeIndex(start=0, stop=4, step=1)

也可以自己创建一个索引序列,用标签标识每个数据点

In [11]:
series_02=pd.Series([4,7,-5,3],index=['d','b','a','c'])
series_02
Out[11]:
d    4
b    7
a   -5
c    3
dtype: int64

与Numpy数组相比,也可以从数据中用标签进行索引而选择数据

In [16]:
series_02['a']
#series_02.a 也可以取出对应对象值,但是不安全,上面更好
Out[16]:
-5
In [17]:
series_02['d']=6  #改变对应索引的对象值
In [18]:
series_02[['c','a','d']]  #['c','a','d']包含的不是数字而是字符串,作为索引列表
Out[18]:
c    3
a   -5
d    6
dtype: int64

使用NumPy函数,比如布尔值数组进行过滤,与标量相乘,或者应用数学函数,这些操作将保存索引值连接

In [19]:
series_02[series_02>0]
Out[19]:
d    6
b    7
c    3
dtype: int64
In [20]:
series_02*2
Out[20]:
d    12
b    14
a   -10
c     6
dtype: int64
In [9]:
import numpy as np
In [22]:
np.exp(series_02)
Out[22]:
d     403.428793
b    1096.633158
a       0.006738
c      20.085537
dtype: float64

Series看作一个长度固定且有序的字典

In [23]:
'b' in series_02
Out[23]:
True
In [24]:
'e' in series_02
Out[24]:
False

如果你已经有数据在python字典中,也可以用python生成一个Series

In [28]:
sdata={
   'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
In [30]:
series_03=pd.Series(sdata)
series_03
Out[30]:
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

我们可以将字典键按照我们想要的顺序传递给构造函数,从而生成的多因顺序符合预期

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

sdata中三个值被放在正确的位置,但由于’California’没有出现在sdata中,因此对应的只为NaN,这是pandas中缺失值或NA值的方式

pandas中使用isnull和notnull函数来检查缺失数据

In [36]:
pd.isnull(series_04)
Out[36]:
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool
In [37]:
pd.notnull(series_04)
Out[37]:
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

isnull和notnull也是series的实例方法

In [38]:
series_04.isnull()
Out[38]:
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

在数学操作中自动对齐索引是Series的一个特性

In [39]:
series_03
Out[39]:
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
In [40]:
series_04
Out[40]:
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64
In [42]:
series_03+series_04
Out[42]:
California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

Series对象自身和其索引都有name属性,这个特性和pandas其他功能集成在一起

In [43]:
series_04.name='population'
In [44]:
series_04.index.name='state'
In [45]:
series_04
Out[45]:
state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

Series索引可以按位置赋值的方式进行改变

In [52]:
series_01
Out[52]:
0    4
1    7
2   -5
3    3
dtype: int64
In [54]:
series_01.index=['bob','steve','jeff','ryan']
series_01
Out[54]:
bob      4
steve    7
jeff    -5
ryan     3
dtype: int64

5.1.2 DataFrame

DataFrame表示的是矩阵的数据表,它包含了已排列的列集合,每一列都可以是不同的值的类型(数值、字符串、布尔值等)。其既有行索引又有列索引,可以被视为是一个共享相同索引的series字典

In [37]:
data={
   'state':['ohio','ohio','ohio','nevada','nevada','nevada'],
     'year':[2000,20001,2002,2001,2003,2003],
      'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data)

产生的DataFrame会自动为Series分配索引,并且列会按照排列的顺序排序

In [38]:
frame
Out[38]:

在这里插入图片描述

对于大型DataFrame,head方法只会选出头部五行

In [39]:
frame.head() #通常只显示列表前五行
Out[39]:

在这里插入图片描述

如果我指定列顺序,则会按照只当顺序排序

In [40]:
pd.DataFrame(data,columns=['year','state','pop'])
Out[40]:

在这里插入图片描述

如果你传的列不在字典中,将会在结果中出现缺失值

In [41]:
frame2=pd.DataFrame(data,columns=['year','state','pop','debt'],
                                  index=['one','two','three','four','five','six'])
frame2
Out[41]:

在这里插入图片描述

可以按照字典型标记或者属性那样检索为series

In [43]:
frame2['state']
Out[43]:
one        ohio
two        ohio
three      ohio
four     nevada
five     nevada
six      nevada
Name: state, dtype: object
In [44]:
frame2.year  #frame[column]对于任意列名均有效,但是frame2.column只在列名是有效的python变量名时有效
Out[44]:
one       2000
two      20001
three     2002
four      2001
five      2003
six       2003
Name: year, dtype: int64

行也可以通过特殊位置或者特殊属性loc进行选取

In [45]:
frame2.loc['three'] #loc则是指定位置行的选取
Out[45]:
year     2002
state    ohio
pop       3.6
debt      NaN
Name: three, dtype: object
In [46]:
frame2.iloc[:2] #iloc按照整数索引来取
Out[46]:

在这里插入图片描述

列的引用可以修改

In [47]:
frame2['debt']=16.5
frame2
Out[47]:

在这里插入图片描述

In [48]:
frame2['debt']=np.arange(6.)
frame2
Out[48]:

在这里插入图片描述

In [49]:
frame2['debt']=np.arange(frame2.shape[0]) #这样就可以确保填充的长度刚好一致
frame2
Out[49]:

在这里插入图片描述

要把列表或数组赋值给一个列时,值的长度必须和DaraFrame的长度相匹配

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

在这里插入图片描述

如果赋值的列并不存在,则会生成一个新的列。我们可以使用del对DataFrame删除列

In [52]:
frame2['eastern']=frame2.state=='ohio'
frame2
Out[52]:

在这里插入图片描述

del方法用于可以移除之前创建的列

In [53]:
del frame2['eastern']
In [54]:
frame2.columns
Out[54]:
Index(['year', 'state', 'pop', 'debt'], dtype='object')

常用的数据形式是包含字典的嵌套字典

In [55]:
pop={
   'nevada':{
   2001:2.4,2002:2.9},
     'ohio':{
   2000:1.5,2001:1.7,2002:3.6}}   #pandas会将字典的键作为列,将内部字典的键作为行索引
In [56]:
frame3=pd.DataFrame(pop)
frame3
Out[56]:

在这里插入图片描述

也可以进行转置操作

In [57]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值