import pandas
import re

mystring = “有1.345mm”
result = re.search("\d+(.\d+)?",mystring)
print(result.group(0))

string2 =“Mike John Jack Lind Cara Cindy Lucy Henry Cara”
result1 = re.search(“Mike(.+) Cara”, string2)
if result1:
print(result1.group(1))

Mike*.Cara

Mike(.)Cara

Mike.?Cara

Mike(?:.*?)Cara

data_group=pandas.read_csv(r"/Users/JMP/Jmp_data/Python/PDABook/第五章/5.3 分组分析/分组分析.csv")

print(data_group[data_group[‘gender’] == “男”])

print(data_group[data_group.id_num.str.contains(“320”)])

id startswith 330 and birthday ==1990

print(data_group[(data_group.birthday.str.contains(“1990”)) & (data_group.id_num.str.startswith(“330”))])
p_table =data_group.pivot_table(values=‘age’, index=‘gender’,aggfunc=(‘count’,“mean”))
p_table.to_csv(“pivot_table_output.csv”)

groupby fucntion to index data.

ga= data_group.groupby(by=“gender”)[‘age’].agg([“mean”,“std”,‘count’])
print(ga)

处理缺失数据

NA处理方法
dropna、fillna
isnull、notnull
过滤缺失数据
dropna返回一仅含非空数据和索引值的Series=data.notnull();对于df会丢弃任何含有na的行,传入how='all’只丢弃全为NA的行;丢弃列则传入axis=1
thresh参数
填充缺失数据
fillna方法参数
value用于填充的值或字典对象
method填充方法,默认ffill
axis默认0即行,axis=1为列
inplace是否产生副本
limit填充最大连续数量

层次化索引

7.数据规整化:清洗、转换、合并、重塑

合并数据集

pandas内置方法合并
pandas.merge根据一个或多个键连接不同的df,实现数据库的连接操作
pandas.concat沿一条轴合并多个对象
combine_first将重复数据接在一起
pd.merge(df1,df2,on=‘key’)
不指定哪个列进行连接,默认是重叠的列名进行连接
两个对象的列名不同可以分别指定
默认情况merge是how='inner’结果中的键是交集,outer是并集,还有left、right
多对多连接产生的是行的笛卡尔积
要对多个键进行合并传入一个键的列表即可
merge函数参数
left、right、how、on、left_on、right_on
left_index、right_index、sort、suffixes、copy
索引上的合并
层次索引必须以列表的形式指明用作合并键的多个列
df.join按索引实现合并并且合并多个带有相同或相似的df对象;还可以传入一组df
轴向连接
concat默认在axis=0工作,将值和索引连接到一起
如果传入axis=1则结果会变成一个df
concat函数参数
objs参与连接的pd对象的列表或字典,唯一必须参数
axis、join、join_axes、keys、levels
names、verify_integrity、ignore_index
合并重叠数据
np.where&pd.combine_first

重塑reshape和轴向旋转pivot

重塑层次化索引
stack 列–>行 df–>Series 默认滤除缺失值
unstack 行–>列 Series–>df
将长格式转换成宽格式
pivot

数据转换

移除重复数据
df.duplicated()返回一个布尔型Series表示是否重复行
drop_duplicates返回一个移除了重复行的df;默认是判断全部列,也可以指定列;默认保留第一个值,也可以保留最后一个
利用匿名函数或映射进行数据转换
map&lambda
替换值
replace
重命名轴索引
map直接修改原始数据,rename创建数据集的转换版[可以结合字典实现对部分轴索引的修改],也可inplace=True修改原数据
离散化和面元划分
离散化函数pd.cut&pd.qcut
检测和过滤离群值
np.random.permutation
df.take
计算指标/哑变量
将分类变量转换为虚拟矩阵或指标矩阵
pd.get_dummies(prefix加前缀)结合cut

字符串操作

字符串对象方法
split()结合strip(修剪空白符,换行符)
‘::’.join()
find[找不到返回-1]和index[找不到会引发异常]
count返回子字符串出现的次数
replace将指定字符替换成指定字符,删除就替换空字符
内置字符串方法
count、endswith、startswith、join、index、find、rfind、replace、strip、rstrip、lstrip、split、lower、upper、ljust、rjust
正则表达式
通过re.compile创建regex对象可以节省大量时间如果对许多字符串应用同一个正则表达式
findall返回所有匹配项的列表,finditer逐个迭代返回
search返回第一个匹配项
match从字符串起始位置开始匹配,返回第一个,否则None
sub将匹配到的替换成指定字符串,并返回新的字符串subn前n个
re.IGNORECASE忽略大小写
split将匹配到的拆分成数段
pandas中矢量化的字符串函数
获取矢量化的元操作:str.get;str[]
矢量化的字符串方法
cat、contains、count、endswith、startswith、findall、get、join、len、lower、upper、match、pad、center、repeat、replace、slice、split、strip、rstrip、lstrip

8.绘图和可视化

matplotlib入门

matplotlib的实例库和文档是成为绘图高手的最佳资源
Figure & Subplot
matplotlib的图像都位于Figure对象中
pyplot.subplots的参数
nrows、ncols、sharex、sharey、subplot_kw、 **fig_wk
subplots_adjust调整图像间距
颜色、标记和线型
plot(linestyle=、color=)常用颜色有缩写,任意RGB
转折点的标记marker=o;drawstyle插值绘图方式
刻度、标签和图例
设置刻度和刻度标签
set_xticks选择要设置刻度的位置
ser_xticklables就是设置刻度的标签
set_xlable设置轴标签
set_title设置标题
添加图例
在添加subplot的时候传入lable
ax.legend|plt.legend(loc=‘best’)自动选一个最好的地方
注解或在Subplot上绘图
注解可以通过text、arrow、annotate添加
text可以文本绘制在指定坐标
在图表上添加一个图形,需要先创建一个块对象shp然后通过ax.add_oatch(shp)将其添加到subplot中
图片保持Figure.savefig
fname、dpi、facecolor、edgecolor、format、bbox_inches
matplotlib配置
plt.rc函数配置,第一个参数是要配置的对象
pandas中的绘图函数

线形图
Series.plot方法默认就是线形图
label、ax、style、alpha、kind、logy、use_index、rot、xticks、yticks、xlim、ylim、grid
df.plot会在一个subplot中为各列绘制一条线并自动创建图例
subplots、sharex、sharey、figsize、title、legend、sort_columns
要更深入需要多学matplotlib API
柱状图
kind='bar’垂直|kind='barh’水平
Series索引会被用作刻度=df.行索引,列索引会作分组
stacked=True堆积柱状图
直方图和密度图
hist生成直方图
plot kind='kde’生成密度图
二者通常一起使用
散布图
plt.scatter观察两个一维数据序列之间的关系
pd.scatter_matrix散布图矩阵
basemap地图插件
图形库mayavi
9.数据聚合与分组运算

GroupBy分组

split-apply-combine
分组键中的缺失值可以使结果包含在NA组了吧
对分组进行迭代
选取一个或一组列
通过字典或Series分组,索引和分组轴要对齐
通过函数进行分组
将函数、数组、列表、字典、Series混合使用进行分组
根据索引级别分组[层次化索引]
数据聚合:从数组产生标量值的数据转换过程

如果要使用自己的聚合函数,传入aggregate和agg方法
非聚合运算的describe方法也可用
优化过的GroupBy方法
count、sum、mean、median、std、var、min、max、prod、first、last
面向列的多函数应用
不同的列使用不同的函数或一次应用多个函数
如果传入的是函数或者函数名,相应的列就会以函数名命名
如果传入的是元组(name,function)就会以第一个参数名命名
如果要对不同的列使用不同的函数,那么就向agg传入一个从列名映射到函数的字典
as_index=False结果返回是无索引的

数组运算和转换

groupby的transform方法,会将一个函数运用到各个分组
apply:一般性的’拆分-应用-合并’
group_keys=False禁止分组键
分位数quantile和桶bucket分析

透视表和交叉表

透视表pivot table根据一个或多个键并根据行、列键将数据分配到各个举行区域里
pd.pivot_table|df.pivot_table参数
margins=True aggfunc= 、values、index、columns、fill_value
交叉表crosstab:用于计算分组频率的特殊透视表
crosstab前两参数可以是数组、Series、数组列表

关于basemap的种种问题

geos始终无法安装好
basemap无法直接安装whl也安装不了
win10 64 py3.5

时间序列

日期和时间数据类型及工具

datetime、time、calendar
date.timedelta表示两个datetime对象之间的时间差
字符串和datetime之间的相互转换
str和strftime可以将datetime转换成字符串
datetime.strptime可以将格式化字符串装换成datetime对象;解析已知格式
dateutil包的parser.parse方法解析所有格式;实用但不完美
datetime格式定义
%Y 四位数年 %y %m %d 两位数
%H 24H制 %I 12H制 %M %S
%w 星期几[0,6] %U 每年的第几周,星期天为界,%W,星期一为界
%z UTC时区偏移量 %F Y-m-d %D m/d/y
特定于当前环境的
%a 星期几简称、%A星期全称
%b月份简称 %B
%c完整日期和时间 %p am,pm
%x适合于当前地区的日期格式,%X时间格式

时间序列基础

pd最基本的时间序列就是以时间戳为索引的Series
索引、选取、子集构造
传入可以被解析成日期的字符串
传入年、月即可选取数据切片
可以使用字符串日、datetime、Timestamp
对非唯一时间戳进行聚合使用groupby

日期的范围、频率、移动

resample将时间序列转换成一个具有固定频率的时间序列
pd.date_range会生成指定长度的daretimeindex
时间序列的基础频率
D日历日 B工作日 H T分 S WOM每月的星期几
移动数据 pd.shift

时区处理

pytz包
本地化和转换
tz_localize、tz_convert转换到别的时区
Timestamp对象的转换
不同时区之间的运算
时期及其算术运算
时期的频率转换
按季度计算的时期频率
to_timestamp
将Timestamp转换成Period[or相反]
to_period方法
通过数组创建PeriodIndex

重采样和频率转换

重采样resample是指将时间序列从一个频率转换到另外一个频率
降采样、升采样,非降非升采样
方法参数
freq、how、axis、fill_method、closed、label、loffset、limit、kind、convention
OHLC重采样,open、high、low、close
通过groupby进行重采样
升采样和插值
通过时期进行重采样

时间序列绘图

pd时间序列的绘图功能比mt好
移动窗口函数rolling_mean
用户自定义移动窗口函数rolling_apply,能从片段中产生单个值

性能和内存使用的注意事项

pandas对数据对齐和重采样进行了高度优化
规则频率之间的转换优化

金融和经济数据应用

数据规整方面

时间序列以及截面对齐
pandas可以在算术运算中自动对齐数据
通过一组不同索引的Series构建df
频率不同的时间序列的运算
频率转换resample和重对齐reindex
使用Period索引的两个不同频率的时间序列之间的运算必须进行显示转换
时间和当前数据选取
at_time、between_time
将Timestamp传入asof可以得到时间点最近的值(若是na的话)
拼接多个数据源
pd.concat
df.combine_first

分组变换和分析

分组因子暴露
因子分析是投资组合定量管理的一种技术
十分位和十分位分析
基于样本分位数的分析
NumPy高级应用

ndarray对象的内部机制

numpy数据类型体系

高级数组操作

向数组的reshape传入一个表示新形状的元组即可
扁平化|散开
C[行优先&内存相邻]和Fortran[列优先&内存相邻]顺序
order=‘C’ || order=‘F’
数组的拆分和合并
np.concatenate可以指定轴将一个数组序列(元组或列表等)连接到一起
比较方便的是np.vstack|np.hstack
np.split将数组沿指定轴拆分为多个数组
concatenate、vstack、row_stack、hstack、column_stack、dstack、split、hsplit、vsplit、dsplit
r_、c_
元素的重复操作tile&repeat
花式索引的等价函数take&put
take可以使用axis put只能按C顺序

广播

后缘维度的轴长相符,其中一方长度为1
沿其他轴向广播
利用广播机制设置数组的值

ufunc高级应用

ufunc实例方法
reduce、accumulate、reduceat、outer
自定义ufunc
np.frompyfunc接收一数组个函数及参数

结构化和记录式数组

定义结构化dtype,使用元组列表,字典式访问
嵌套dtype和多维字段

和排序有关的话题

ndarray的sort实例方法是直接排序,原始数据会消失
而np.sort会创建一个已排序的副本,还可以指定排序轴
二者都无法设置为降序
间接排序:argsort、lexsort
python对象数组只能用快排排序
np.searchsorted在有序数组中查找元素,返回位置坐标
Numpy的Matrix类

高级输入输出

内存映像文件可以处理内存放不下的大文件
np.memmap会将大文件分成小段来读写

性能建议

将python的循环和逻辑转换成数组运算和布尔数组运算
多用广播
多使用数组切片避免复制数据
使用ufunc
考虑Cython
连续内存

python data PDAdata pivot table ,group by, contains, starts with相关推荐

  1. python | pivot table

    pandas如何做pivot table 怎么把pivot table转成dataframe 筛选出列整理成新的dataframe 多个集合取并集 增加新的一列添加百分比给这一列加上百分号 挑出前十行 ...

  2. Use Excel Pivot Table as a BI tool

    Normally, we have created a table, view in database or cube in SSAS, user can use Excel as a BI tool ...

  3. Pivot Table

    Pivot Table source data checklist(条件): -no blank columns -no black row -no merged cells -source data ...

  4. Excel 中使用数据透视表 Pivot Table

    http://www.cnblogs.com/waitrabbit/archive/2010/06/29/1767702.html "数据透视表"  英文是 Pivot Table ...

  5. A2-02-24.DML- Inserting Data into A Table Using MySQL INSERT Statement

    转载自:http://www.mysqltutorial.org/mysql-insert-statement.aspx Home / Basic MySQL Tutorial / Inserting ...

  6. Python Data Structures

    1. list 2. stack 3. queue 4. tuple 5. sequence 6. set 7. dict # -*- coding: utf-8 -*- # 添加中文注释 ''' C ...

  7. python loading_MXNet Python Data Loading API

    MXNet Python Data Loading API Introduction 介绍 MXNet 数据加载模块的主要特性. Create A Data Iterator 介绍如何在创建一个 py ...

  8. python pandas库——pivot使用心得

    python pandas库--pivot使用心得 2017年12月14日 17:07:06 阅读数:364 最近在做基于python的数据分析工作,引用第三方数据分析库--pandas(versio ...

  9. python处理html的table标签

    转载:http://www.xuebuyuan.com/583071.html python处理html的table标签 2012年01月06日 ⁄ 综合 ⁄ 共 5279字 ⁄ 字号 小 中 大 ⁄ ...

最新文章

  1. Unet实现图像分割(一)
  2. WIN7 X64 Setup Oracle Developer Suite 10g
  3. IntelliJ IDEA 修改包名
  4. SAP ERP系统业务优化之采购订单追踪
  5. linux 怎么完全卸载mysql数据库
  6. 在echarts3中使用字符云
  7. JAVA通信编程(一)——串口通讯
  8. Centos Nginx+PHP Install 史上最完美
  9. 如何用几何画板破解版制作正方体展开动画
  10. MTK TP驱动代码调用流程
  11. 突破网吧及机房管理限制的方法(转)
  12. Springboot整合kafka
  13. 华为云 CentOS 镜像源配置
  14. 超简单的晃咖、小咖秀视频去水印下载方法
  15. 全网最详细charles抓包工具详细教程,实战教程(细致)
  16. 20175208 实验一 Java开发环境的熟悉
  17. 【STM32F407的DSP教程】第3章 Matlab简易使用之基础操作
  18. 怎么看SaaS企业中的收入留存率?
  19. CODING 敏捷实战系列课第一讲:正本清源——敏捷的为什么
  20. 一个人的思想:漫谈技术社区

热门文章

  1. 中国数字地球行业发展态势与投资前景展望报告(新版)2022-2027年
  2. Hive Invalid path xxxx: No files matching path file: xxxx
  3. 高效办公——Excel表格-03篇(Excel常用快捷键 以及 Excel快捷键结合公式的各种常见的办公例子)
  4. mysql优化之query_cache_type的DEMAND参数介绍
  5. 每日一问-ChapGPT-20230416-中医基础-经络
  6. 解密“达达-京东到家”的订单即时派发技术原理和实践
  7. Liunx系统编程篇—进程通信(二)无名管道(原理、创建、实战)命名管道(原理、创建、实战)
  8. 长城会十周年:文厨用故事讲述它的“前世今生”
  9. 网络安全基础知识入门!网络安全学习教程
  10. osd 显示 png格式图片水印