Pandas常见数据结构Series、DataFrame

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'

同时还有lociloc方法也可以获取指定行

比起直接使用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

发表评论

电子邮件地址不会被公开。

51 + = 61