当前位置: 代码迷 >> 综合 >> python data PDAdata pivot table ,group by, contains, starts with
  详细解决方案

python data PDAdata pivot table ,group by, contains, starts with

热度:75   发布时间:2023-12-28 01:16:35.0

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
连续内存

  相关解决方案