1.删除指定列、重命名列
场景:
多数情况并不是底表的所有特征(列)都对分析有用,这个时候就只需要抽取部分列,对于不用的那些列,可以删除。
重命名列可以避免有些列的命名过于冗长(比如Case When 语句),且有时候会根据不同的业务指标需求来命名。
In [2]:
#删除列:
df.drop(col_names, axis=1, inplace=True)
#重命名列:
df.rename(index={'row1':'A'},columns ={'col1':'B'})
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-e0120bce2ebb> in <module>
1 #删除列Python版:
----> 2 df.drop(col_names, axis=1, inplace=True)
3 #重命名列Python版:
4 df.rename(index={'row1':'A'},columns ={'col1':'B'})
NameError: name 'df' is not defined
2.重复值、缺失值处理
场景:比如某网站今天来了1000个人访问,但一个人一天中可以访问多次,那数据库中会记录用户访问的多条记录,而这时候如果想要找到今天访问这个网站的1000个人的ID并根据此做用户调研,需要去掉重复值给业务方去回访。
缺失值:NULL做运算逻辑时,返回的结果还是NULL,这可能就会出现一些脚本运行正确,但结果不对的BUG,此时需要将NULL值填充为指定值。
In [ ]:
# 重复值处理
df.drop_duplicates()
# 缺失值处理
df.fillna(value = 0)
df1.combine_first(df2)
3.替换字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串处理
场景:理解用户行为的重要一项是去假设用户的心理,这会用到用户的反馈意见或一些用研的文本数据,这些文本数据一般会以字符串的形式存储在数据库中,但用户反馈的这些文本一般都会很乱,所以需要从这些脏乱的字符串中提取有用信息,就会需要用到文字符串处理函数。
In [4]:
## 1、空格处理
df[col_name] = df[col_name].str.lstrip()
## 2、*%d等垃圾符处理
df[col_name].replace(' &#.*', '', regex=True, inplace=True)
## 3、字符串分割
df[col_name].str.split('分割符')
## 4、字符串拼接
df[col_name].str.cat()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-4-eff96fdaf4d3> in <module>
1 ## 1、空格处理
----> 2 df[col_name] = df[col_name].str.lstrip()
3
4 ## 2、*%d等垃圾符处理
5 df[col_name].replace(' &#.*', '', regex=True, inplace=True)
NameError: name 'df' is not defined
4. 合并处理
场景:有时候你需要的特征存储在不同的表里,为便于清洗理解和操作,需要按照某些字段对这些表的数据进行合并组合成一张新的表,这样就会用到连接等方法。
In [ ]:
左右合并
#1.
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
# 2.
pd.concat([df1,df2])
上下合并
df1.append(df2, ignore_index=True, sort=False)
5.窗口函数的分组排序
场景:假如现在你是某宝的分析师,要分析今年不同店的不同品类销售量情况,需要找到那些销量较好的品类,并在第二年中加大曝光,这个时候你就需要将不同店里不同品类进行分组,并且按销量进行排序,以便查找到每家店销售较好的品类。
In [ ]:
df['Rank'] = df.groupby(by=['Sale_store'])['Sale_Num'].transform(lambda x: x.rank(ascending=False))
时间序列处理
场景:大量的时间序列数据需要转换成datetime类型来处理
In [ ]:
df['date'] = pd.to_datetime(df['date'].astype(str))