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