文章数据
收藏(次)
【python数据分析】第七章 数据清洗-2
检测和过滤异常值
--------------------------------------------------------------------------------
frame = pd.DataFrame(np.random.randn(10, 4))
frame 原数据:
0 1 2 3
0 1.211742 0.726473 -0.158983 -0.556901
1 1.566219 0.611021 0.853429 1.253408
2 1.314577 -0.148209 0.640972 1.088422
3 0.813400 0.952328 0.292401 0.280164
4 1.038525 -0.208040 1.475298 0.648371
5 -1.703501 0.979300 -0.911073 0.557996
6 -2.091178 -0.301706 0.853614 0.383021
7 1.506010 -0.029728 -1.301921 0.228425
8 1.175125 1.890259 0.474352 0.039509
9 -0.383908 1.382467 -0.920056 -0.866885
(frame.abs() > 1.5) # 得到 和 frame 同型的bool DataFrame
frame[(frame.abs() > 1.5)] # 花样选择, 得到同型的,但是只有满足条件的数据,其他是 NA 的 DataFrame
(frame.abs() > 1.5).any() # 每列上有 大于 1.5 的列即可满足
输出:
0 True
1 True
2 False
3 False
dtype: bool
(frame.abs() > 1.5).any(axis=1) # 每行上有 大于 1.5 的行即可满足
输出:
0 False
1 True
2 False
3 False
4 False
5 True
6 True
7 True
8 True
9 False
dtype: bool
frame[(frame.abs() > 1.5).any(axis=1)]
输出: 把满足的行留下了
0 1 2 3
1 1.566219 0.611021 0.853429 1.253408
5 -1.703501 0.979300 -0.911073 0.557996
6 -2.091178 -0.301706 0.853614 0.383021
7 1.506010 -0.029728 -1.301921 0.228425
8 1.175125 1.890259 0.474352 0.039509
--------------------------------------------------------------------------------
排列和随机采样,排列不是排序
--------------------------------------------------------------------------------
比如把读进入的数据重新排列(可能是有序的排序,也可能是随机的打乱), 排序有现有的方法
如果是随机打乱呢?
用numpy.random.permutation函数可以轻松实现对Series或DataFrame的列的排列工作
--------------------------------------------------------------------------------
df = pd.DataFrame(np.arange(5 * 4).reshape((5, 4)))
newIdx = np.random.permutation(5) # 返回一个随机序列,使用这个序列打乱原数据
newidx 输出: array([3, 1, 4, 2, 0])
df.take(newIdx) # 获取指定序列的数据,有axis 的作用, 用刚才的打乱序列
df.sample(3) # 随机返回axis上的 参数 条数据, 没有参数就是1条
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
series = pd.Series([5, 7, -1, 6, 4])
# series.sample(n=10) # ERROR 取的样本点多于原样本点
series.sample(n=10, replace=True) # 是否允许样本重复出现 replace=True
================================================================================
计算指标/哑变量: 不太明白意义是什么,略
--------------------------------------------------------------------------------
字符串的操作:
--------------------------------------------------------------------------------
str 数据自带的各种方法
注意:find和index的区别:如果找不到字符串,index将会引发一个异常(而不是返回-1)
s.count('a') # a 在字符串 s 中出现的次数
字符串的方法
count
endswith, startswith
join
index
find
rfind
replace
strip,rstrip,lstrip 去除空白符(包括换行符)
split
lower, upper
ljust, rjust 如果字符串位数不够指定的,添加空格
--------------------------------------------------------------------------------
正则表达式:略
================================================================================
pandas的矢量化字符串函数
--------------------------------------------------------------------------------
data = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com', 'Rob': 'rob@gmail.com', 'Wes': np.nan}
series = pd.Series(data)
series 输出:
Dave dave@google.com
Steve steve@gmail.com
Rob rob@gmail.com
Wes NaN
dtype: object
series.isnull() # 判断是否是 null 返回 一维数组
series.str.contains('gmail')
输出:
Dave False
Steve True
Rob True
Wes NaN # 对 nan 不操作,所以 返回 NAN
dtype: object
说明:
series.str 是什么,很明显这是一个属性,可以迭代,类型是 pandas.core.strings.StringMethods
不是 所有的 Series 对象都能 .str 的 比如 se = pd.Series([1,2,3]) se.str 就会报错
他是获得 Series 的每个值,每个值就是 str, 如果类型不是 string 类型就不能 .str,
如果是 nan 类型,就跳过,不对他操作。
series.str 现在就是每个字符串元素了,当成普通字符串处理即可。比如,切片一下:
series.str[:4]
那么 series.str. 的方法有哪些?
cat 连接
count 给定字符串出现的次数
extract 抽取
endswith
startstwith
findall
get 获取指定位置的字符
isalnum
isalpha
isdecimal
isdigit
islower
isnumeric
join
len
lower upper
match
pad 左,右,或两边添加空格
center
repeat
replace
slice
split
strip 去掉空白符
rstrip
lstrip
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
分享
收藏
点赞人
举报
文章标签
评论列表