合并数据集
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 | 去空格 |