四、数据规整化:清洗、转换、合并和重塑
2018-03-08 21:37
363 查看
1、合并数据集(merge,join,concat)
pandas对象中的数据可以通过一些内置的方式进行合并
* pandas.merge可以根据一个或者多个键值连接起来,就是SQL中的数据库连接工作。
* pandas.concat可以沿着一条轴将多个对象堆叠在一起
* 实例方法combine_first可以讲重复数据编接在一起 ,用一个对象中的值填充另一个对象中的缺失值(外连接)。
1>> 处理重复列名的问题
pandas会自动添加后缀
pd.merge(left,right,on = ‘key1’)
后缀可以通过suffixes选项来指定
pd.merge(left,right,on = ‘key1’,suffixes = (‘_left’,’_right’))
2>>索引上的合并(merge,join)
pd.merge(left2,right2,how = ‘outer’,left_index = True,right_index = True)
DataFrame有一个join实例方法,它能更方便地实现按索引合并。还可以用作合并多个带有相同或者相似索引的DataFrame对象,而不管有没有重叠的列
left2.join(right2,how = ‘outer’) join方法类似于左连接
merge(默认inner连接):
on:用于连接的列名 on=“key” 也可以分别指定:left_on=“lkey” right_on=“rkey” left_index=True(索引连接)
how:指定inner,outer,left,right
join(默认左连接) left.join([right,another])
concat(默认axis=0行连接)
join=inner得到交集;join=outer得到并集
3>>轴向连接(堆叠、绑定)
一种合并运算为连接(concatenation),绑定(binding)或者堆叠(stacking)。
Numpy有一个用于合并原始Numpy数组的concatenation函数:
concat默认行连接。keys参数用于区分连接的片段,建立层次化索引。
4>> 合并重叠数据(where,combine_first)
还有一种数据是不能简单通过merge、concatenation解决的。比如,有可能部分或者全部索引重叠的两个数据集。(where语句)
combine_first也是做同样的事,可以看作用参数对象中的数据 #为调用者对象的确实数据“打补丁”
2、重塑和轴向旋转(stack,unstack,pivot)
1>>重塑层次化索引
stack(),unstack(默认level=-1).
2>>将长格式旋转为宽格式(pivot(行索引列名,列索引列名,填充dataframe值/数据的列名))
下面就是将data、item作为行、列名,value填充进二维表
pivoted = ldata.pivot(‘date’,’item’,’value’)
pivot其实只是一个“快捷方式而已”,用set_index创建层次化索引,再用unstack重塑
unstacked=data.set_index([‘date’,’item’]).unstack(‘item’)
3、数据转换
1>> 移除重复数据(duplicated,drop_duplicates)
duplicated:判断是否有重复行,返回布尔
drop_duplicateds:返回移除了重复行的dataframe(参数 keep=last返回最后一组组合)
2>> 利用函数或映射进行数据转换(map)
1.Series的map(dict)方法可以接受一个函数或含有映射关系的字典型对象
2.map(str.lower)转换成小写
3>> 重命名轴索引(rename):复制dataframe并对其索引和列标签进行赋值
替换值 (replace)
4>>离散化和面元划分(pd.cut,qcut)
cat=pd.cut(元数据,面元边界值组成的列表)
可以设置自己的面元名称,设置label是即可
group_names = [‘Youth’,’YoungAdult’,’MiddleAged’,’Senior’]
pd.cut(ages,bins,labels = group_names)
cat.categories 显示划分区间;cats.labels(codes)显示划分结果;pd.value_counts(cat)显示每个区间的元素个数
qcut函数是一个类似于cut的函数,可以根据样本分位数对数据进行面元划分。根据数据,cut可能无法使各个面元数量数据点相同,qcut使用的是样本分位数,因此可以得元素个数相同的面元。
5>> 检测和过滤异常值
np.abs()绝对值 data[(np.abs(data)>3).any(1)] 含有绝对值大于3的行
np.sign返回由1和-1组成的数组,表示原始值的符号。
6>> 排列和随机采样(permutation)
df.take(np.random.permutation(len(df))[:3]) :随机重排序
7>> 计算指标/哑变量(get_dummies(不同的变量值的列名/pd.cut(values,bins)))
将分类变量(categorical variable)转换为“哑变量矩阵”(dummy matrix)或“指标矩阵”(indicator matrix)。如果DataFrame的某一列有k各不同的值,可以派生出一个k列的矩阵或者DataFrame(值为1和0)
step1:处理数据,使得数据规整化
genre_iter = (set(x.split(‘|’)) for x in movies.genres)
genres = sorted(set.union(*genre_iter))
step2:创建dummies零矩阵
dummies = DataFrame(np.zeros((len(movies),len(genres))),columns = genres)
step3:填入1
for i,gen in enumerate(movies.genres):
dummies.ix[i,gen.split(‘|’)] = 1
step4: join连接,添加前缀
movies.join(dummies.add_prefix(“genre_”))
3、字符串操作
1>> 字符串对象方法(split,strip,“+”/join,in/find/index,count,replace)
first,second,third=piece
“::”.join(piece) 等价于 first+”::”+second+”::”+third
注意:strip()只去除首尾的空格;
replace(‘c1’,’c2’):把字符串里的c1替换成c2。故可以用replace(’ ‘,”)来去掉字符串里的所有空格
split():通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
2>> 正则表达式
re模块的函数分为3类:模式匹配、替换、拆分
(1)
regex=re.compile(‘\s+’) 一个或多个空白符,先编译后使用
findall:返回匹配模式的所有字符串组成的列表;
search:返回匹配的第一个字符串对象地址
match:只匹配出现在字符串开头(字符串的首部)的模式(不匹配返回None),返回的是匹配的对象地址
sub(“替换的字符串”,原来的字符串):将匹配的模式替换为指定的字符串
(2) re.compile(strPattern[, flag]):
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 第二个参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。
可选值有:
* re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
* M(MULTILINE): 多行模式,改变’^’和’$’的行为(参见上图)
* S(DOTALL): 点任意匹配模式,改变’.’的行为
* L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
* U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
* X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
3>> pandas中的矢量化的字符串函数(跳过na值)
问题: 通过Series的map函数,所有字符串和正则表达式方法都能被应用于各个值(传入lambda表达式或其他函数),但是如果存在NA就会报错。
解决: Series有一些能够跳过NA值得字符串操作方法,通过Series的str属性可以访问这些方法。
pandas对象中的数据可以通过一些内置的方式进行合并
* pandas.merge可以根据一个或者多个键值连接起来,就是SQL中的数据库连接工作。
* pandas.concat可以沿着一条轴将多个对象堆叠在一起
* 实例方法combine_first可以讲重复数据编接在一起 ,用一个对象中的值填充另一个对象中的缺失值(外连接)。
1>> 处理重复列名的问题
pandas会自动添加后缀
pd.merge(left,right,on = ‘key1’)
后缀可以通过suffixes选项来指定
pd.merge(left,right,on = ‘key1’,suffixes = (‘_left’,’_right’))
2>>索引上的合并(merge,join)
pd.merge(left2,right2,how = ‘outer’,left_index = True,right_index = True)
DataFrame有一个join实例方法,它能更方便地实现按索引合并。还可以用作合并多个带有相同或者相似索引的DataFrame对象,而不管有没有重叠的列
left2.join(right2,how = ‘outer’) join方法类似于左连接
merge(默认inner连接):
on:用于连接的列名 on=“key” 也可以分别指定:left_on=“lkey” right_on=“rkey” left_index=True(索引连接)
how:指定inner,outer,left,right
join(默认左连接) left.join([right,another])
concat(默认axis=0行连接)
join=inner得到交集;join=outer得到并集
3>>轴向连接(堆叠、绑定)
一种合并运算为连接(concatenation),绑定(binding)或者堆叠(stacking)。
Numpy有一个用于合并原始Numpy数组的concatenation函数:
concat默认行连接。keys参数用于区分连接的片段,建立层次化索引。
4>> 合并重叠数据(where,combine_first)
还有一种数据是不能简单通过merge、concatenation解决的。比如,有可能部分或者全部索引重叠的两个数据集。(where语句)
combine_first也是做同样的事,可以看作用参数对象中的数据 #为调用者对象的确实数据“打补丁”
2、重塑和轴向旋转(stack,unstack,pivot)
1>>重塑层次化索引
stack(),unstack(默认level=-1).
2>>将长格式旋转为宽格式(pivot(行索引列名,列索引列名,填充dataframe值/数据的列名))
下面就是将data、item作为行、列名,value填充进二维表
pivoted = ldata.pivot(‘date’,’item’,’value’)
pivot其实只是一个“快捷方式而已”,用set_index创建层次化索引,再用unstack重塑
unstacked=data.set_index([‘date’,’item’]).unstack(‘item’)
3、数据转换
1>> 移除重复数据(duplicated,drop_duplicates)
duplicated:判断是否有重复行,返回布尔
drop_duplicateds:返回移除了重复行的dataframe(参数 keep=last返回最后一组组合)
2>> 利用函数或映射进行数据转换(map)
1.Series的map(dict)方法可以接受一个函数或含有映射关系的字典型对象
2.map(str.lower)转换成小写
3>> 重命名轴索引(rename):复制dataframe并对其索引和列标签进行赋值
替换值 (replace)
4>>离散化和面元划分(pd.cut,qcut)
cat=pd.cut(元数据,面元边界值组成的列表)
可以设置自己的面元名称,设置label是即可
group_names = [‘Youth’,’YoungAdult’,’MiddleAged’,’Senior’]
pd.cut(ages,bins,labels = group_names)
cat.categories 显示划分区间;cats.labels(codes)显示划分结果;pd.value_counts(cat)显示每个区间的元素个数
qcut函数是一个类似于cut的函数,可以根据样本分位数对数据进行面元划分。根据数据,cut可能无法使各个面元数量数据点相同,qcut使用的是样本分位数,因此可以得元素个数相同的面元。
5>> 检测和过滤异常值
np.abs()绝对值 data[(np.abs(data)>3).any(1)] 含有绝对值大于3的行
np.sign返回由1和-1组成的数组,表示原始值的符号。
6>> 排列和随机采样(permutation)
df.take(np.random.permutation(len(df))[:3]) :随机重排序
7>> 计算指标/哑变量(get_dummies(不同的变量值的列名/pd.cut(values,bins)))
将分类变量(categorical variable)转换为“哑变量矩阵”(dummy matrix)或“指标矩阵”(indicator matrix)。如果DataFrame的某一列有k各不同的值,可以派生出一个k列的矩阵或者DataFrame(值为1和0)
step1:处理数据,使得数据规整化
genre_iter = (set(x.split(‘|’)) for x in movies.genres)
genres = sorted(set.union(*genre_iter))
step2:创建dummies零矩阵
dummies = DataFrame(np.zeros((len(movies),len(genres))),columns = genres)
step3:填入1
for i,gen in enumerate(movies.genres):
dummies.ix[i,gen.split(‘|’)] = 1
step4: join连接,添加前缀
movies.join(dummies.add_prefix(“genre_”))
3、字符串操作
1>> 字符串对象方法(split,strip,“+”/join,in/find/index,count,replace)
first,second,third=piece
“::”.join(piece) 等价于 first+”::”+second+”::”+third
注意:strip()只去除首尾的空格;
replace(‘c1’,’c2’):把字符串里的c1替换成c2。故可以用replace(’ ‘,”)来去掉字符串里的所有空格
split():通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
2>> 正则表达式
re模块的函数分为3类:模式匹配、替换、拆分
(1)
regex=re.compile(‘\s+’) 一个或多个空白符,先编译后使用
findall:返回匹配模式的所有字符串组成的列表;
search:返回匹配的第一个字符串对象地址
match:只匹配出现在字符串开头(字符串的首部)的模式(不匹配返回None),返回的是匹配的对象地址
sub(“替换的字符串”,原来的字符串):将匹配的模式替换为指定的字符串
(2) re.compile(strPattern[, flag]):
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 第二个参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。
可选值有:
* re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
* M(MULTILINE): 多行模式,改变’^’和’$’的行为(参见上图)
* S(DOTALL): 点任意匹配模式,改变’.’的行为
* L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
* U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
* X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
3>> pandas中的矢量化的字符串函数(跳过na值)
问题: 通过Series的map函数,所有字符串和正则表达式方法都能被应用于各个值(传入lambda表达式或其他函数),但是如果存在NA就会报错。
解决: Series有一些能够跳过NA值得字符串操作方法,通过Series的str属性可以访问这些方法。
相关文章推荐
- python数据分析第8天 数据规整化:清理,转换,合并,重塑
- 数据规整化:清理、转换、合并、重塑
- 数据规整化:清理、转换、合并、重塑 《用Python进行数据分析》读书笔记第7章
- 第7章 数据规整化:清理、转换、合并、重塑 (1)
- 数据规整化:清理,转换,合并,重塑
- 第7章 数据规整化:清理、转换、合并、重塑(2)
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(1)
- 第7章 数据规整化:清理、转换、合并、重塑(3)
- 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(一)
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(5) .
- 《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(一)
- 第7章 数据规整化:清理、转换、合并、重塑(4)
- 数据规整化:清理、转换、合并、重塑
- Python之数据规整化:清理、转换、合并、重塑
- Python之数据规整化:清理、转换、合并、重塑
- chapter7-数据规整化:清理、转换、合并、重塑
- 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
- python学习笔记——数据规整化:清理、转换、合并、重塑
- 数据规整化:清理、转换、合并、重塑
- 《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(二)