2.1、数据清洗
定义:数据清洗就是处理缺失数据以及消除无意义的信息,如删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与分析主题无关的数据,处理缺失值、异常值等。
1. 重复值处理
duplicated(subset=None, keep='first') 标记重复数据
drop_duplicates(subset=None, keep='first', inplace=false) 删除重复数据
subset:用于识别重复的列标签或列标签序列,默认所有列标签;
keep='first':表示除了第一次出现外,其余相同的数据被标记为重复;
keep='last':表示除了最后一次出现外,其余相同的数据被标记为重复;
keep='False':表示所有相同的数据都被标记为重复
inplace:是否在源数据上修改;inplace=True在源数据中修改没有返回值,inplace=False修改数据返回一个新对象
例:
>>> df
age name
0 20 alex
1 17 power
2 20 alex
3 18 alex
4 19 harry
>>> df.duplicated()
0 False
1 False
2 True
3 False
4 False
dtype: bool
>>> df.duplicated(subset='name')
0 False
1 False
2 True
3 True
4 False
dtype: bool
>>> df.drop_duplicates(subset='name')
age name
0 20 alex
1 17 power
4 19 harry
>>> df
age name
0 20 alex
1 17 power
2 20 alex
3 18 alex
4 19 harry
>>> df.drop_duplicates(subset='name', inplace=True)
>>> df
age name
0 20 alex
1 17 power
4 19 harry
>>>
2、缺失值处理
df.isnull()和df.notnull():判断缺失情况
df.dropna():删除值为空的数据行
df.fillna():用其他数值替代NaN
df.fillna(method='pad'):用前一个数据值替代缺失值
df.fillna(method='bfill'):用后一个数据值替代缺失值
df.fillna(df.mean()):用平均数替代缺失值
df.fillna(df.mean()[填补列名:计算均值的列名]):指定其他列的平均值替代缺失值
df.fillna({列名1:值1, 列名2:值2}):对不同的列填充不同的值
NaN用来表示浮点和非浮点数组中的缺失数据
2.2、数据抽取
1、字段抽取
slice(start, stop):抽出某列上指定位置的数据做成新的列
例:
>>> df
event_no
0 2019123456
1 2019123456
2 2019123456
3 2019123456
4 2019123456
>>> df['event_no'].str.slice(0,4)
0 2019
1 2019
2 2019
3 2019
4 2019
Name: event_no, dtype: object
2、字段拆分
split(sep, n, expand=False)
sep:表示用于分隔字符串的分割符;
n:表示分割后新增的列数;
expand:表示是否展开为数据框,默认为False
例:
>>> df
IP
0 192.200.122.2
1 192.200.122.3
2 192.200.122.4
3 192.200.122.5
4 192.200.122.6
>>> df['IP'].str.split('.',3)
0 [192, 200, 122, 2]
1 [192, 200, 122, 3]
2 [192, 200, 122, 4]
3 [192, 200, 122, 5]
4 [192, 200, 122, 6]
Name: IP, dtype: object
>>> df['IP'].str.split('.',3,True)
0 1 2 3
0 192 200 122 2
1 192 200 122 3
2 192 200 122 4
3 192 200 122 5
4 192 200 122 6
3、重置索引
df.set_index(列名):指定列为索引
例:
>>> df
age name
0 20 alex
1 17 power
2 20 alex
3 18 alex
4 19 harry
>>> df.set_index('name')
age
name
alex 20
power 17
alex 20
alex 18
harry 19
4、记录抽取
df[condition]:根据条件对数据进行抽取,返回DataFrame对象
condition:表示过滤条件
常用的condition类型:
- 比较运算符:==、<、>、<=、>=、!=;例:df[df.comments > 10000];
- 范围运算符:between(left, right);例:df[df.comments.between(1000, 10000)];
- 空值运算:pandas.isnull();例:df[df.title.isnull()];
- 字符串匹配:str.contains(pattan,na=False);例:df[df.title.str.contains('电台', na=False)];
- 逻辑运算符:&(与)、|(或)、not(取反);例:df[(df.comments>=1000)&(df.comments<=10000)];
5、随机抽样
numpy.random.randint(start, end, num)
start:表示范围的开始值
end:表示范围的结束值
num:表示抽样的个数
返回值:行的索引值序列
例:
>>> df
age name
0 20 alex
1 17 power
2 20 alex
3 18 alex
4 19 harry
>>> r = numpy.random.randint(0,4,1)
>>> df.loc[r]
age name
3 18 alex