向量化字符串操作
Series 和 Index对象 的str属性。
可以正确的处理缺失值
方法列表
正则表达式。
Method | Description |
---|---|
match() | Call re.match() on each element, returning a boolean. |
extract() | Call re.match() on each element, returning matched groups as strings. |
findall() | Call re.findall() on each element |
replace() | Replace occurrences of pattern with some other string |
contains() | Call re.search() on each element, returning a boolean |
count() | Count occurrences of pattern |
split() | Equivalent to str.split(), but accepts regexps |
rsplit() | Equivalent to str.rsplit(), but accepts regexps |
其他字符串方法
Method | Description |
---|---|
get() | Index each element |
slice() | Slice each element |
slice_replace() | Replace slice in each element with passed value |
cat() | Concatenate strings |
repeat() | Repeat values |
normalize() | Return Unicode form of string |
pad() | Add whitespace to left, right, or both sides of strings |
wrap() | Split long strings into lines with length less than a given width |
join() | Join strings in each element of the Series with passed separator |
get_dummies() | extract dummy variables as a dataframe |
处理时间序列
Pandas 最初是为金融模型而创建的。
- 时间戳: 表示某个具体的时间点
- 时间间隔与周期:开始与结束的时间长度
- 时间增量 time delta 或 持续时间 duration 表示精确 的 时间长度。
原生python的日期 和时间工具: datetime dateutil
一旦有了datetime对象,就可以做很多操作
原生的处理数据量大的时间就会比较慢。
时间类型数组, Numpy的datetime64 类型
有了 日期格式,就可以进行快速的向量化运算
日期 与 时间单位格式代码
Code | Meaning | Time span (relative) | Time span (absolute) |
---|---|---|---|
Y | Year | ± 9.2e18 years | [9.2e18 BC, 9.2e18 AD] |
M | Month | ± 7.6e17 years | [7.6e17 BC, 7.6e17 AD] |
W | Week | ± 1.7e17 years | [1.7e17 BC, 1.7e17 AD] |
D | Day | ± 2.5e16 years | [2.5e16 BC, 2.5e16 AD] |
h | Hour | ± 1.0e15 years | [1.0e15 BC, 1.0e15 AD] |
m | Minute | ± 1.7e13 years | [1.7e13 BC, 1.7e13 AD] |
s | Second | ± 2.9e12 years | [ 2.9e9 BC, 2.9e9 AD] |
ms | Millisecond | ± 2.9e9 years | [ 2.9e6 BC, 2.9e6 AD] |
us | Microsecond | ± 2.9e6 years | [290301 BC, 294241 AD] |
ns | Nanosecond | ± 292 years | [ 1678 AD, 2262 AD] |
ps | Picosecond | ± 106 days | [ 1969 AD, 1970 AD] |
fs | Femtosecond | ± 2.6 hours | [ 1969 AD, 1970 AD] |
as | Attosecond | ± 9.2 seconds | [ 1969 AD, 1970 AD] |
Pandas的日期与时间工具: 理想与现实的最佳解决方案
Timestamp对象。 结合 numpy.datetime64 的有效存储和向量化接口 和 datetime / dateutil的易用性。
Pandas时间蓄力:用时间作索引
取值操作。直接可以通过年份
Pandas 的时间序列数据结构
- 对应的索引数据结构是DatetimeIndex
- 针对时间周期数据, Pandas提供了Period类型。 对应的索引数据结构是 PeriodIndex
- 针对时间增量或者持续时间,Pandas提供了Timedelta类型。 对应的索引数据结构 TimedeltaIndex
最基础的日期/时间对象是Timestamp 和 DatetimeIndex. 可以直接使用。
最常用的方法是pd.to_datetime()函数。可以解析许多日期与时间格式
输入一个日期会返回Timestamp类型。
输入一个时间序列会返回一个DatetimeIndex类型。
任何DatetimeIndex类型都可以通过to_period()方法和一个频率代码转换成PeriodIndex类型。
当一个日期减去另一个日期,返回的结果是TimedeltaIndex类型
有规律的时间序列
更简便的创建有规律的时间序列。
-
pd.date_range()可以处理时间戳
通过freq参数改变时间间隔,默认值是D
-
pd.period_range()可以处理周期
-
pd.timedelta_range()可以处理时间间隔
pd.timedelta_range(0, periods=10, freq='H')
时间频率与偏移量
Pandas时间序列工具的基础是时间频率或偏移量offset代码。
Code | Description | Code | Description |
---|---|---|---|
D | Calendar day | B | Business day |
W | Weekly | ||
M | Month end | BM | Business month end |
Q | Quarter end | BQ | Business quarter end |
A | Year end | BA | Business year end |
H | Hours | BH | Business hours |
T | Minutes | ||
S | Seconds | ||
L | Milliseonds | ||
U | Microseconds | ||
N | nanoseconds |
带开始 索引的频率 代码
Code | Description | Code | Description |
---|---|---|---|
MS | Month start | BMS | Business month start |
QS | Quarter start | BQS | Business quarter start |
AS | Year start | BAS | Business year start |
可以加三位月份缩写字母来改变季、年频率的开始时间
Q-JAN, BQ-FEB, QS-MAR, BQS-APR, etc.
A-JAN, BA-FEB, AS-MAR, BAS-APR, etc.
同理 可以加三位 星期缩写字母来改变一周开始的时间
W-SUN, W-MON, W-TUE, W-WED, etc.
可以组合 。
创建一个工作日偏移序列
重新取样、迁移、窗口
超时。数据获取不到。淦。。。不学了。
from pandas_datareader import data
goog = data.DataReader('GOOG', start='2004', end='2016', data_source='yahoo')
goog.head()
重新取样与频率转换。
经常需要按照新的频率 对数据进行重新取样
可以通过resample()方法 or asfreq()方法。
resample 以数据累计 为基础
asfreq 以数据选择 为基础
goog.plot(alpha=0.5, style='-')
goog.resample('BA').mean().plot(style='😂
goog.asfreq('BA').plot(style='--');
plt.legend(['input', 'resample', 'asfreq'],
loc='upper left');
时间迁移
对数据按照时间进行迁移。
shift 和tshift
shift迁移数据
tshift迁移索引
移动时间窗口
移动统计值, rolling()属性来实现
高性能Pandas: eval() 与 query()
pandas.eval()
普通计算
使用eval,快一倍。内存消耗更少。
使用DataFrame.eval()实现列间运算。
使用eval的好处是 可以借助列名进行 运算。