Pandas

Python学习笔记(5):Pandas数据结构介绍

2019-02-09  本文已影响2人  刘爱玛

目录

一、Pandas的数据结构介绍

1、Series

Series类型类似于字典类型,每组数据都有一组与之相关的数据标签(即索引)组成。
来看看最简单的Series:

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

可以看到数值左边都有一列索引。一个Series对象有一列index值和一列values值。

obj.values
输出:array([ 4,  7, -5,  3])

obj.index
输出:RangeIndex(start=0, stop=4, step=1)

索引值也是可以自定义的。

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

obj2['a']
输出:-5

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

对Series对象进行运算,也会保留其索引值。

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

obj2 * 2
输出:d     8
b    14
a   -10
c     6
dtype: int64

import numpy as np
np.exp(obj2)
输出:d      54.598150
b    1096.633158
a       0.006738
c      20.085537
dtype: float64

Series与字典。Series对象可以像字典对象一样,可以用在许多原本需要字典参数的函数中。也可以通过字典类型来创建Series类型。

'b' in obj2
输出:'b' in obj2

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)
obj3
输出:Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

如果只传入一个字典,则结果Series的索引就是原字典的键。

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

Series对象有name属性及index.name属性

obj4.name = 'population'
obj4.index.name = 'state'
obj4
输出:state
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Name: population, dtype: float64

2、DataFrame

DataFrame类型可以简单理解为有行索引及列索引的数据类型,也可以理解为带索引的Series。从创建开始说起。

(1)Dataframe创建

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时,自动为数据增加了行索引,0~4。
可以在创建DataFrame时规定列的顺序。

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

也可以自定义行索引的值。

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

另一种创建方式是通过嵌套字典。

pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = DataFrame(pop)
frame3
输出: Nevada  Ohio
2000    NaN 1.5
2001    2.4 1.7
2002    2.9 3.6

(2)读取DataFrame的索引名和数值

可以通过DataFrame.columns读取DataFrame的列索引名。

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

可以通过DataFrame.index读取DataFrame的行索引名。

frame2.index
输出:Index(['one', 'two', 'three', 'four', 'five'], dtype='object')

可以通过DataFrame.values方法读取DataFrame除索引外的纯数据值。

frame2.values
输出:array([[2000, 'Ohio', 1.5, nan],
       [2001, 'Ohio', 1.7, -1.2],
       [2002, 'Ohio', 3.6, nan],
       [2001, 'Nevada', 2.4, -1.5],
       [2002, 'Nevada', 2.9, -1.7]], dtype=object)

(3)读取DataFrame特定索引的值

可以通过['索引名']或.索引名的方式读取某列的数据。

frame2['state']
输出:one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object

frame2.year
输出:one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64

frame2.year['one']
输出:2000

(4)为DataFrame对象赋值

可以用标量数值直接为某列数据进行赋值,或者用Series类型数据为DataFrame某几列赋值。

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

val = 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

(5)列的删除

frame2['eastern'] = (frame2.state == 'Ohio')
frame2
输出: year    state   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 frame2['eastern']
frame2.columns
输出:Index(['year', 'state', 'pop', 'debt'], dtype='object')

3、index对象

首先来看看index对象是什么。

obj = Series(range(3), index = ['a', 'b', 'c'])
index = obj.index
index
输出:Index(['a', 'b', 'c'], dtype='object')

可见,对Series和DataFrame对象使用index方法,返回的就是一个index对象。
index是不可以被手动修改的。不可修改性非常重要,这样才能使index在多个数据结构之间安全共享。
index常用的方法有很多,可以参照如下表格。

index的方法和属性
上一篇 下一篇

猜你喜欢

热点阅读