数据分析 007-数据清洗和准备
导入所需的库
1 | import numpy as np |
空值处理
判断是否有空值
1 | s1 = pd.Series(['one', 'two', np.nan, 'four', np.nan]) |
判断有几个空值(统计空值个数)
1 | print(s1.isnull().sum()) |
缺失值处理
删除
源数据:
1 | # Series |
dropna() 函数:会删除所有带空值的关联数据(比如行,列)
1 | # Series |
dropna() 函数中的 how=”all” 参数:只删除所有数据为空值的行或列
1 | print(data1.dropna(how="all")) |
dropna() 函数中的 axis=1 参数:删除空值的方向,默认为 0 ,即行, 设置为 1 则为列
1 | print(data1.dropna(how="all", axis=1)) |
dropna() 函数中的 thresh=1 参数:设置阈值,即数据中的行至少需要保留一个非空值的数据(如果某行的数据都为空值,则删除该行)
1 | print(data1.dropna(thresh=1)) |
填充
源数据:
1 | df = pd.DataFrame(np.random.randn(6,4)) |
通过赋值的方式填充
1 | df.iloc[:3,2]=NA |
常数填充:用 0 填充
1 | print(df.fillna(0)) |
不同列填充不同值
1 | df.iloc[1,1] = NA |
向上填充
1 | print(df.fillna(method='ffill')) |
向下填充
1 | print(df.fillna(method='bfill')) |
异常值
源数据:
1 | # DataFrame |
把 -1000 替换成空值
1 | replace_data = data.replace(-1000, NA) |
多个值替换
1 | replace_data = data.replace([-999, 2], [np.nan, 0]) # -999 替换成 NaN ,2 替换成 0 |
重复值
源数据:
1 | data = pd.DataFrame({'k1': list('abababaa'), 'k2': [1,1,2,2,3,3,4,4]}) |
drop_duplicates() 默认对行的重复数据进行删除
1 | print(data.drop_duplicates()) |
drop_duplicates() ,函数内填入列名,则按指定的列进行去重
1 | print(data.drop_duplicates(['k1'])) |
数据转换
源数据:
1 | data = pd.DataFrame({'food': ['Banana', 'bone', 'Grass', 'fish', 'worm'], |
将数据进行转换,使其一一对应:
1 | data['animal'] = data['food'].str.lower().map(eat_animal) # map() 可接受有映射关系的字典对象 |
cut 分段:离散化
源数据:
1 | ages = [20, 21, 23, 25, 28, 30, 37, 62, 69, 55, 35, 45, 57, 78, 83,96, 103] |
使用 cut 离散化数据:
1 | cut_ages = pd.cut(ages, bins=bins_) |
统计各年龄段有多少个
1 | print(cut_ages.value_counts()) |
加标签
1 | group_name = ['少年', '青年','中年','老年'] |
1 |
|
qcut()
1 | data= np.random.randint(1, 100, 1000) |
案例: 爬虫数据清洗
1 | # https://lishi.tianqi.com/beijing/202309.html |
read_excel() 读取爬虫数据:
1 | data = pd.read_excel('./weather.xlsx') |
数据拆分:日期列
1 | print(data['日期'].str.split(' ', expand=True)) # expand =True 表示展开成2列 |
查看日期类型
1 | print(data.info()) |
数据拆分:风向列
1 | data[['Wind', 'Leave']] = data['风向'].str.split(' ', expand=True) |
数据替换:删除最高气温中的单位(replace 是针对整个单元格去进行处理的,而 str.replace 是针对单元格内的单个元素进行处理)
1 | print(data['最高气温'].str.replace('℃', '')) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 生活日志!
评论