5.1pandas的数据结构

文章介绍了pandas库中的Series和DataFrame数据结构,Series是一维数组,包含数据和相关索引,而DataFrame是表格型数据结构,有行和列,适用于存储不同类型的多维数据。DataFrame的列可以是不同类型的值,且支持算术运算时的自动对齐。此外,文章还提到了索引对象的重要性和如何处理缺失数据。
摘要由CSDN通过智能技术生成

1、series

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

Series的字符串表现形式为:索引在左边,值在右边。可以通过Series的values和index属性获取其数组表示形式和索引对象。

from pandas import Series
obj = Series([4, -7, 5, 3])

import pandas as pd
pd.Series([4, -7, 5, 3])
obj.values
obj.index

obj2 = Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])

obj

0    4
1   -7
2    5
3    3

通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引。 可以通过索引的方式选取Series中的単个或一级值。

obj2 = Series([1, 2, 3, 4],index=['a', 'b', 'c', 'd'])
obj2['a']
obj2[['c', 'a']]
obj2[obj2 > 0]
obj2*2

可以将Series看成一个定长的有序字典。 如果数据被存放在一个字典中,也可以直接通过这个字典来创建Series。

如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

'b' in obj2
data = {'Ohio':3500,'Texas':7100,'Oregon':1600}
obj3 = Series(data)

states = ['California','Ohio','Texas','Oregon']
obj4 = Series(data, index=states)

pandas的isnull和notnull函数可用于检测缺失数据。 Series也有类似的实例方法。

import pandas as pd
pd.isnull(obj4)
obj4.isnull()
pd.notnull(obj4)

结果:

California     True
Ohio          False
Texas         False
Oregon        False
dtype: bool

California    False
Ohio           True
Texas          True
Oregon         True
dtype: bool

Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据

Series对象本身及其索引都有一个name属性

obj3 + obj4
obj4.name = 'population'
obj4.index.name = 'states'
obj4

结果:

states
California       NaN
Ohio          3500.0
Texas         7100.0
Oregon        1600.0
Name: population, dtype: float64

2、DataFrame

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

DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。

跟其他类似的数据结构相比(如R的data.frame) ,DataFrame中面向行和面向列的操作基本上是平衡的。

其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

构建DataFrame

如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列

from pandas import DataFrame
data = {'states':['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

   states  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', 'states', 'pop'])

frame

   year  states  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', 'states', 'pop', 'debt'],
                         index=['one', 'two', 'three', 'four', 'five'])

frame2

       year  states  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

将DataFrame的列获取为一个Series

frame2['states']
frame2.year

.iloc能使用,注意iloc里只能用数字作为索引。

.loc可以使用,loc里只能跟行标签为索引,当没有行标签,loc可以用数字做为索引。

d.loc['c2']
d.iloc[0:4]

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

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

frame2

       year  states  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.states == 'Ohio'

frame2

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

关键字del用于剔除列。

del frame2['eastern']

3、索引对象

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。

obj = Series(range(3),index=['a', 'b', 'c'])
obj.index
import numpy as np
index = pd.Index(np.arange(3))
obj2 = Series([1.5, -2.5, 0],index=index)
obj2.index is index  # True
frame3 = DataFrame(pop)

frame3

      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5
'Ohio' in frame3.colums  # True
2001 in frame3.index  # True
import numpy as np
import pandas as pd
index = pd.Index(np.arange(3))
obj2 = pd.Series([1.5, -2.5, 0],index=index)
obj2.index = pd.Index(np.arange(1, 4))

obj2

1    1.5
2   -2.5
3    0.0
dtype: float64

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值