数据规整化

合并数据集

1.数据库风格的DataFrame合并:merge,join

pd.merge(df1, df2)

on=[''],默认将重叠列当键(列名不同left_on, right_on)

how='',默认inner,也可'left', 'right','outer'笛卡尔积

suffixes=('_x', '_y'),重复列名时使用

​ 其他参数:

left, right;

left_index, right_index,索引键连接True/False,索引上的合并

sort=True排序,copy=True复制

df1.join(df2, how='outer'):可合并多个待有相同索引的,左连接,也可传入一组dataframe

2.轴向连接:pd.concat

数组的连接函数:np.concatenate([arr1, arr2], axis=1)

pd.concat([s1, s2, s3])

axis=0,默认0产生新的Series ,1时产生DataFrame

join='outer'

join_axes=[]:指定要合并索引值

keys=[]:在连接后的结构创建层次化索引索s引用,与result.unstack()连用

​ axis=1时,keys就成为列头

​ 同样逻辑使用dataframe,

​ {'level 1': df1, 'level 2': df2}传入字典:字典的键被当之keys的值

levels:外层级别的索引

names[]:分层级别的名称,管理层次化索引参数

ignore_index=True,忽略索引

verify_integrity=False:默认运行重复

3.合并重叠数据np.where()

全部或部分重叠时:np.where(pd.isnull(a), b, a)

Series的combine_first()同样功能,自动补齐:df1.combine_first(df2)

重塑和轴向旋转

1.重塑层次化索引:stack

stack:将列转化为行,k可传入指定列名,dropna=True默认滤除缺失数据,(unstuck)

2.长格式旋转为宽格式:转置:povit

povited=data.pivot('col1', 'col2', 'col3'):参数value填充,多个value参数层次化

​ 快捷方式,相当于set_index和unstack

数据转换

1.移除重复数据

data.duplicated():检查是否重行

data.drop_duplicates():去重行,根据指定列传入参数['key']

​ take_last=False,默认保留第一个

2.利用函数和映射:map
A_to_B = {'a' : 'b'}
# Series的map方法
data['B'] = data['A'].map(A_to_B)
# data['B'] = data['A'].map(lambda x: A_to_B[x])
3.值替换:replace

data.replace('要替换的值',np.nan):替换成NaN,多个替换传入[],不同值的不同替换传入{}

fillna作为特殊情况填充

4.重命名索引轴

data.index.map(str.upper/lower):仅改变大小写

data.rename(index={}, columns={}, inplace=True):也可传入属性方法str.upper。inplace是否更改

5.离散化和面元划分:cut,qcut

cats = pd.cut(ages, [18, 25, 35, 50]) : 将年龄分组,返回的是所属区间

参数:right=False表示右开左闭

data = pd.cut(data, 4, precision=2):根据最值分为四组

属性:

cats.lables:所属区间的序号
cats.levels:所有区间
pd.value_counts(cats):每个区间所含数量

data = pd.qcut(data, 4):按四分位数位数进行分组,可传入自定义分位数[0.1, 0.5, 0.9, 1.]

6.检查和过滤异常值(离群值)

data[(np.abs(data) > 3).any(1)]:在data中所有绝对值大于3的,返会True/False。

​ any()全部为false时才返回false。any(1),axis=1。

data[(np.abs(data) > 3) = np.sign(data) * 3:将数值设定在+-3之间

​ np.sign()返回1和-1表示原始数据符号。

7. 排列和随机采样:permutation
#shuffle直接改变元数据,permutation是返回不更改
sampler = np.random.permutation(5)  # 随机重排序
df.take(sampler)
# 随机选取3个
df.take(np.random.permutation(len(df))[:3])
8.计算指标/哑变量

将分类变量转换为哑变量矩阵/指标矩阵

pd.get_dummies(df['key']):key列包含n个不同的值,就派生n列

prefix='前缀名',加前缀名,前缀名_列名

字符串操作

字符串对象方法 说明
split() 拆分
strip(),rstrip,lstrip 去空格
'str'.join(obj) 连接字符,也可用+
in 定位
count() 计算次数
replace() 替换
endswith, startswith 是否以''结尾或开始
join 连接,作为分隔符
find 查找(第一个位置)
rfind 查找(最后一个)
index 查找,返回所在位置。(找不到会报错)
lower,upper
ljust,rjust 填充,以符号最低宽带。默认空格
正则

raw string类型(不包含转义符):r'text', r'[1-9]\d{5}'

re库常用功能函数 说明
re.search() 第一个位置,返回match对象(在一个字符串中)
re.match() 开始位置器匹配,返回match(在一个字符串中)
re.findall() 所有匹配的,列表返回全部字符串
re.split() 按匹配结果分割,返回列表(在一个字符串中)<br />参数maxsplit=0最大分割数
re.finditer() 搜索字符串,返回匹配结果的迭代,match对象
re.sub() 替换,(在一个字符串中)<br />参数:repl:替换的,count=0几次。prt

re.search(pattern, string, flags=0) pattern正则,string目标,flags控制标记

​ flags标记:re.i, re.IGNORECASE:忽略大小写

re.M, re.MULTILINE:^匹配每行开始

re.S, re.DOTALL:. 匹配所有字符

re.compile(pattern, flags=0):字符串编译成正则表达式

pandas中矢量化的字符串函数
pandas中矢量化的字符串函数 说明
cat 连接,元素级
contains 包含
count 计数
replace() 替换
endswith, startswith 是否以''结尾或开始
findall 查找(所有)
get 获取第i个元素
join 连接,作为分隔符
len 长度
lower,upper
match re.match
pad 添加空白符
center =pad(side='both')
repeat 重复
slice 对Series这的各个字符串进行截取
split 分隔
strip(),rstrip,lstrip 去空格
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容