Series
类似于数组,主要不同在于
Series可以支持索引
定义&检索
#
> from pandas import Series
> import pandas as pd
# 定义一个带无指定索引的Series,此时相当于一个数组,通过下标来索引数据
> ser1 = Series([1,2,3,4])
> ser1
0 1
1 2
2 3
3 4
dtype: int64
# 定义一个带有指定索引的Series
> ser2 = Series([1,2,3,4],index=["a","b","c","d"])
> ser2
a 1
b 2
c 3
d 4
dtype: int64
# 另外也可以通过字典来创建Series
> ser3 = {'a': 1, 'b': 2, 'c': 3}
# 可以通过索引来访问数据
> ser2["a"]
1
# 可以直接获取所有的键值或键名,跟map一般
> ser2.index
Index(['a', 'b', 'c', 'd'], dtype='object')
> ser2.values
array([1, 2, 3, 4])
计算
总的来说Series保留了NumPy的操作,同时保持引用的作用
> ser2 = Series([1,2,3,4],index=["a","b","c","d"])
# 获取value>2的所有键值对
> ser2[ser2>2]
c 3
d 4
dtype: int64
# 矩阵乘法
> ser2 *2
a 2
b 4
c 6
d 8
dtype: int64
着重说一下自动对齐功能,再也不用for循环了。可以将两个Series中相同键名的值进行计算,有一方不存在的值为NaN
> ser1 = Series([10,20,30],index=["a","b","c"])
> ser2 = Series([1,2,3,4],index=["a","b","c","d"])
> ser1 + ser2
a 11.0
b 22.0
c 33.0
d NaN
dtype: float64
DataFrame
定义&检索
相当于一个二维表,含有
行索引
和
列索引
。
#
> from pandas import DataFrame
# step1. 构建等长数组为value的字典
> df1 = {'Name':['a','b','c'], 'Age':[1,2,3], 'Sex':['m','f','m']}
# 将字典转为DataFrame
> frame1 = DataFrame(df1)
frame1
Name Age Sex
0 a 1 m
1 b 2 f
2 c 3 m
# 注意看到在最左边还多了一列,这是默认生成的行索引。当然也可以通过index指定
> frame1 = DataFrame(df1,index=["i1","i2","i3"])
frame1
Name Age Sex
i1 a 1 m
i2 b 2 f
i3 c 3 m
# 也可以指定列的顺序
> frame1 = DataFrame(df1,columns=["Age","Sex","Name"])
frame1
Age Sex Name
0 1 m a
1 2 f b
2 3 m c
# 可以通过 字典索引 或者 属性 两种方式来获取数组
# 通过字典索引
>frame1["Name"]
i1 a
i2 b
i3 c
Name: Name, dtype: object
>frame1["Name"]["i1"]
'a'
#通过属性获取
> frame1.Name
i1 a
i2 b
i3 c
Name: Name, dtype: object
> frame1.Name.i1
'a'
注意到这里获取的顺序都是列->行,如果想获取指定行,可以通过ix
> frame1.ix["i1"]
Name a
Age 1
Sex m
Name: i1, dtype: object
> frame1.ix["i1"].Name
'a'
同时还有loc
和iloc
方法也可以获取指定行
比起直接使用
DataFrame
的
列->行
方式获取数据,loc和iloc提供的
行->列
方式显得更加自然。
# iloc=index location,按照下标顺序来获取行
> frame1.iloc[0]
Name a
Age 1
Sex m
Weight 21
Name: i1, dtype: object
# 按照行名称来获取行
> frame1.loc["i1"]
Name a
Age 1
Sex m
Weight 21
Name: i1, dtype: object
# 获取所有行的`Name`列
> frame1.loc[:,["Name"]]
Name
0 a
1 b
2 c
# 带筛选条件(获取Age==1的行)
> frame1.loc[frame1.Age==1]
Name Age Sex
0 a 1 m
计算
> df1 = {'Name':['a','b','c'], 'Age':[1,2,3], 'Sex':['m','f','m']}
> frame1 = DataFrame(df1,["i1","i2","i3"])
# 增加列&更改列
> frame1["Weight"]=[21,31,41]
> frame1
Name Age Sex Weight
i1 a 1 m 21
i2 b 2 f 31
i3 c 3 m 41
# 按列计算
> frame1["Weight"] > 30
i1 False
i2 True
i3 True