# 左分列
pd.Series().str.split(pat = None,n = -1,expand = False )
'''
pat -> str,要拆分的字符串或正则表达式,例如:'-'。默认拆分空格。
n -> int,默认-1;限制输出中的分割数。None,0和-1解释为返回所有拆分。【就是当用于分列的依据符号在有多个的话需要指定分列的次数(不指定的话就会根据符号有几个分列几次)】
expand -> bool,默认为False;将拆分的字符串展开为单独的列。
True:返回DataFrame / MultiIndex;
False:返回包含字符串列表的Series / Index。
'''
# 右分列
rsplit()处理方式一样,看一下帮助函数文档填参数就行
当我们向要Series中字符串类型的某一部分,可以通过写正则表达式将其匹配出来。
Ⅰ、Python常用正则表达式链接…
Ⅱ、Python常用正则表达式链接…
pd.Series().str.extract()
'''
pat -> str 正则表达式
flags -> int, 匹配规则,如忽略大小写,跨行匹配,默认0
expand -> bool, 是否将结果展开成DataFrame类型
'''
pd.Series().str.extractall()
'''
以组的形式进行返回,多个结果是以match作为索引放置。
pat -> str 正则表达式
flags -> int, 匹配规则,如忽略大小写,跨行匹配,默认0
'''
当我们向要Series中字符串类型的某一部分,可以通过写正则表达式将其不需要的部分匹配出来,然后替换掉(如果是要删除则new参数为空字符串就行)。
Ⅰ、Python常用正则表达式链接…
Ⅱ、Python常用正则表达式链接…
pd.Series().str.replace(old, new[, max])
'''
old -> 将被替换的子字符串。
new -> 新字符串,用于替换old子字符串。
max -> 可选字符串, 替换不超过 max 次
return -> 返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
'''
''' -------- 去重第一步--------
查看数据是否重复,去掉完全重复的数据
'''
print('数据集是否存在重复观测: \n', any(数据框.duplicated()))
# 计算重复数量
np.sum(数据框.duplicated())
# 查看那些数据重复
数据框[数据框.duplicated()]
# 删除所有变量都重复的行
数据框.drop_duplicates()
''' -------- 去重第二步--------
根据实际情况,针对部分数据进行去重
'''
数据框.drop_duplicates(subset=['列名_1', ' 列名_2', '列名_3', ' 列名_4'], inplace=True)
''' -------- 缺失值处理第一步--------
统计数据缺失程度
'''
# 每列缺失比例
数据框.apply(lambda x: str(round(sum(x.isnull())/len(x)*100,2))+'%' , axis= 0)
# 删除处理
# 1代表列,O代表行,any是只要有缺失,就删除这一行,基于三个变量(默认是全部列)
数据框.dropna(axis=0, how='any', subset=['列_1','列_2', '列_3'])
''' -------- 缺失值处理第二步--------
选择合理的方式对数据进行处理
'''
# 指定值填充
数据框/某列.fillna(指定值)
# 均值填充
某列.fillna(某列.mean())
# 中位数填充
某列.fillna(某列.median())
# 众数填充
某列.fillna(某列.mode()[0])
# 指定多列同时填充
数据框.fillna(value = {'第一列_众数' :某列.mode ()[0],'第二列_均值':某列.mean()})
# 向前填补
某列.fillna(method='ffill')
# 向后填补
某列.fillna(method='bfill')
# -----------------插值法---------------
待补充
# -----------------算法法---------------
待补充
''' -------- 异常值处理第一步--------
异常值检测
'''
# 画图观察数据
import matplotlib.pyplot as plt
plt.style.use(' seaborn')
某列.plot(kind = 'hist', bins= 30, density= True) # 绘制直方图
某列.plot(kind = 'kde') # 绘制核密度图
plt.show()
# 箱线图
某列.plot(kind = 'box')
# 方法一 -> 标准差法
x_bar = 某列.mean()
x_std = 某列.std()
print('标准差法异常值上限检测:\n', any(某列 > x_bar + 2.5 * x_std))
print('标准差法异常值下限检测:\n', any(某列 < x_bar - 2.5 * x_std))
# 方法二 -> 箱线图法
Q1 = 某列.quantile(q = 0.25)
Q3 = 某列.quantile(q = 0.75)
IQR = Q3 - Q1
print('箱线图法异常值上限检测:\n', any(某列 > Q3 + 1.5 * IQR))
print('箱线图法异常值下限检测:\n', any(某列 < Q1 - 1.5 * IQR))
''' -------- 异常值处理第二步--------
选择合理的方式对数据进行处理
'''
筛选出异常值替换掉就OK
在这里插入代码片
图片来源>>幸福的小猴子qiqi
属性名称 | 作用 |
---|---|
year | 返回四位的年 |
month | 返回月份,int类型 |
day | 日,int类型 |
hour | 小时,int类型 |
minuter | 分钟,int类型 |
second | 秒,int类型 |
dayofweek | 一周中的星期几,0代表星期一,6代表星期天 |
weekofyear | 一年中的第几周 |
dayofyear | 一年中的第几天 |
quarter | 一年中的第几个季度 |
pd.Series().cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
'''
x -> 类array对象,且必须为一维,待切割的原形式
bins -> 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量,但是在这种情况下,x的范围在每个边上被延长1%,以保证包括x的最小值或最大值。如果bin是序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下没有x的范围的扩展。
right -> bool。是否是左开右闭区间,right=True,左开右闭right=False,左闭右开
labels -> 用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
retbins -> bool。是否返回面元
precision -> int。返回面元的小数点几位
include_lowest -> bool。第一个区间的左端点是否包含
'''
pd.Series().qcut(x, q, labels=None, retbins=False, precision=3, duplicates=’raise’)
'''
x -> 类array对象,且必须为一维,待切割的原形式
q -> 整数或分位数组成的数组。比如 4 代表 按照4分位数 进行切割
labels -> 用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元。
'''