今天,我们接着上次的数据转换操作讲解
01 数据转换
01-01 替代值
通常我们使用replace来替换缺失值。 #!/usr/bin/python # -- coding: UTF-8 --
import pandas as pd
import numpy as np
data = pd.Series([1., -999., 2., -999., -1000, 3.])
print(data)
print(data.replace(-999,np.nan))
结果如下:
如果你想要一次替代多个值,可以传入一个列表或替代值。
print(data.replace([-999, -1000],np.nan))
也可以对应替换:
print(data.replace([-999, -1000],[np.nan,0]))
# 参数也可以通过字典传递
print(data.replace({-999:np.nan,-1000:0}))
01-02 离散化和分箱
连续值经常需要离散化,或分离成“箱子”进行分析。
举例:对如下年龄进行分箱。
ages = [19, 20, 22, 25, 27, 21, 23, 27, 37, 31, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100]
cats = pd.cut(ages, bins)
print(cats)
可以通过labels选项传递一个列表来自定义箱名。
precision=2的选项将十进制精度限制在两位。
使用qcut可以获得等长的箱。
01-03 检测和过滤异常值
np.sign(data)根据数据中的值的正负生成1和-1的数值。
下列表达式限制了-3
到3
的值:
data[np.abs(data) > 3 ] = np.sign(data) * 3
01-04 置换和随机抽样
使用numpy.random.permutation对DataFrame中的Series或行进行置换(随机重排序)。
sample方法可以帮助你选出一个不含有替代值的随机子集。
要生成一个带有替代值的样本,将replace=True传入sample方法。
01-05 计算指标/虚拟变量
如果DataFrame中的一列有k个不同的值,则可以衍生一个k列的值为1和0的矩阵或DataFrame。get_dummies函数用于实现该功能。
02 字符串操作
split可以用来分割字符串。
strip用来清除空格换行等。
字符串"::"的join方法可传入一个列表或者元组
in用来检测子字符串。
find和index也可以检测子字符串。
区别在于:
index在字符串没找到时会抛出异常,而find会返回-1。
count返回的是某个特定字符串在字符串中出现的次数。
replace常用于一种模式替代另一种模式。
ljust,rjust用于左对齐,右对齐。
data.str.contains('google')可以用来检测字符串是否含有google。