内容简介
pandas是一个强大的工具,他有两种主要的数据结构:Series和DataFrame,还有一些基于这两种结构的基本功能,以及汇总和统计功能,接下来会分4篇博客来详细的介绍pandas的使用。这4篇博客的主题为:
2)Series和DataFrame的索引、切片、过滤,算术运算与数据对齐,函数映射,排序等
3)Series和DataFrame的汇总和计算统计描述
4)Series和DataFrame的层次化索引
本篇博客主要讲述Series和DataFrame的基本功能,包括索引、切片、过滤,算术运算与数据对齐,函数映射,排序等,内容安排如下所示:
1)重新索引
2)丢弃指定轴上的项
3)索引、选取和过滤
4)算术运算和数据对齐
5)函数应用和映射
6)排序
7)带有重复值的轴索引
1)重新索引
该功能主要是为了解决什么问题呢?应该是时间序列这样的数据,有时间点缺失的填充问题。主要的实例方法是.reindex(),可以处理Series和DataFrame类型的数据重新索引。
import pandas as pd
from pandas import Series,DataFrame
objSeries1 = Series(range(6),index = ['a','d','e','f','g','h'])
objSeries1
a 0
d 1
e 2
f 3
g 4
h 5
dtype: int64
objSeries2 = objSeries1.reindex(['a','b','c','d','e','f','g','h'])
objSeries2#系统自动在缺失索引填充NaN
a 0.0
b NaN
c NaN
d 1.0
e 2.0
f 3.0
g 4.0
h 5.0
dtype: float64
objSeries1
a 0
d 1
e 2
f 3
g 4
h 5
dtype: int64
objSeries1.reindex(['a','b','c','d','e','f','g','h'],fill_value = 10)
a 0
b 10
c 10
d 1
e 2
f 3
g 4
h 5
dtype: int64
objSeries1
a 0
d 1
e 2
f 3
g 4
h 5
dtype: int64
注意,reindex不改变原数据
reindex函数的参数如下表所示:
参数 | 说明 |
---|---|
index | 用作索引的新序列,既可以是Index实例,也可以是其他序列的python数据结构,Index会被完全使用 |
method | 插值(填充)方式,具体参数请见下表 |
fill_value | 在重新索引的过程中,需要引入缺失值时使用的替代值 |
limit | 前向和后向填充时的最大填充量 |
level | 在MultiIndex的指定级别上匹配简单索引,否则选取其子集 |
copy | 默认为True,无论如何都到赋值,如果为False,则新旧相等就不复制?(不太懂) |
对于时间序列的有序数据,重新索引时可以做一些插值处理。method方法可以达到此目的,method插值选项如下表所示:
参数 | 说明 |
---|---|
ffill或pad | 前向填充 |
bfill或backfill | 后向填充 |
objSeries3 = Series(['a','b','c'],index = [0,2,4])
objSeries3.reindex(range(6),method = 'ffill')
0 a
1 a
2 b
3 b
4 c
5 c
dtype: object
objSeries3
0 a
2 b
4 c
dtype: object
下面来看一下DataFrame的重新索引,对于DataFrame,reindex可以修改行、列索引,也可以两个都修改,如果仅传入一列,则会重新索引行。
import numpy as np
frame = DataFrame(np.arange(9).reshape(3,3),index = ['a','b','c'],columns = ['0hio','stata','texas'])
frame
0hio | stata | texas | |
---|---|---|---|
a | 0 | 1 | 2 |
b | 3 | 4 | 5 |
c | 6 | 7 | 8 |
frame.reindex(['a','b','c','d'],method = 'ffill')#插值只能按行进行即纵轴(1轴)
0hio | stata | texas | |
---|---|---|---|
a | 0 | 1 | 2 |
b | 3 | 4 | 5 |
c | 6 | 7 | 8 |
d | 6 | 7 | 8 |
reColumns = ['stata','utah','texas']
frame.reindex(columns = reColumns,method = 'ffill')#插值只能按行进行即纵轴(1轴)
stata | utah | texas | |
---|---|---|---|
a | 1 | NaN | 2 |
b | 4 | NaN | 5 |
c | 7 | NaN | 8 |
插值只能按行进行即纵轴(1轴)
还可以利用ix的标签索引功能
frame.ix[['a',