利用Python进行数据分析笔记-数据清洗

本文详细介绍了Python数据分析中的数据清洗方法,包括填补缺失值、删除重复值、转换数据、重命名轴索引、离散化、检测异常值、随机采样和计算虚拟变量。此外,还探讨了字符串处理,如对象方法、正则表达式和向量化函数的使用。
摘要由CSDN通过智能技术生成
在pandas中,missing data呈现的方式有些缺点的,但对大部分用户能起到足够的效果。对于数值型数据,pandas用浮点值Nan(Not a Number)来表示缺失值。我们称之为识别符(sentinel value),这种值能被轻易检测到 # 数据缺失 在pandas中,我们使用了R语言中的一些传统,把缺失值表示为NA(not available)。在统计应用里,NA数据别是要么是数据不存在,要么是存在但不能被检测到。做数据清理的时候,对缺失值做分析是很重要的,我们要确定是否是数据收集的问题,或者缺失值是否会带来潜在的偏见。 内建的Python None值也被当做NA
import pandas as pd
import numpy as np
from numpy import nan as NA

string_data = pd.Series(['aardvark', 'artichoke', NA, 'avocado'])
string_data
0     aardvark
1    artichoke
2          NaN
3      avocado
dtype: object
string_data.isnull()
0 False 1 False 2 True 3 False dtype: bool 这里有一些用来处理缺失值的函数: ![](http://oydgk2hgw.bkt.clouddn.com/pydata-book/zq0q8.png) ### 1、Filtering Out Missing Data(过滤缺失值) 有一些方法来过滤缺失值。可以使用pandas.isnull和boolean indexing, 配合使用dropna。对于series,只会返回non-null数据和index values:
# 直接过滤缺失值
data = pd.Series([1, NA, 3.5, NA, 7])
data.dropna()
0    1.0
2    3.5
4    7.0
dtype: float64
df = pd.DataFrame(np.random.randn(7, 3))
df
0 1 2
0 -0.029785 0.110282 -1.577633
1 -1.489474 -1.467383 0.006396
2 -1.105860 0.476798 -0.400001
3 -1.573019 0.147722 0.250568
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
df
0 1 2
0 -0.029785 NaN NaN
1 -1.489474 NaN NaN
2 -1.105860 NaN -0.400001
3 -1.573019 NaN 0.250568
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588
# 会删除行或列
df.dropna()
0 1 2
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588
df.dropna(thresh=2) 
0 1 2
2 -1.105860 NaN -0.400001
3 -1.573019 NaN 0.250568
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588

2、Filling In Missing Data(填补缺失值)

在处理缺失值的时候,一些情况下我们会直接用dropna来把缺失值删除,但另一些情况下,我们希望用一些固定的值来代替缺失值,而fillna就是用来做这个的,例如,这里我们用平均值mean来代替缺失值NA
- fillna返回一个新对象,但你可以使用in-place来直接更改原有的数据

# 全部填充0
df.fillna(0)
0 1 2
0 -0.029785 0.000000 0.000000
1 -1.489474 0.000000 0.000000
2 -1.105860 0.000000 -0.400001
3 -1.573019 0.000000 0.250568
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588
# 给fillna传入一个dict,可以给不同列替换不同的值
df.fillna({
  1: 0.5, 2: 0})
0 1 2
0 -0.029785 0.500000 0.000000
1 -1.489474 0.500000 0.000000
2 -1.105860 0.500000 -0.400001
3 -1.573019 0.500000 0.250568
4 -0.848726 1.002656 0.568422
5 1.457525 0.411282 -0.257635
6 2.828644 -1.237598 -0.532588

下面是fillna的一些参数:

states = ['Ohio', 'New York', 'Vermont', 'Florida',
          'Oregon', 'Nevada', 'California', 'Idaho']

data = pd.Series(np.random.randn(8), index=states)
data[['Vermont', 'Nevada', 'Idaho']] = np.nan
data
Ohio          0.760579
New York      0.729209
Vermont            NaN
Florida      -2.195910
Oregon       -0.658126
Nevada             NaN
California   -1.851410
Idaho              NaN
dtype: float64
group_key = ['East'] * 4 + ['West'] * 4

data.groupby(group_key).mean()
East   -0.235374
West   -1.254768
dtype: float64

然后我们可以用每个组的平均值来填充NA:

fill_mean = lambda g: g.fillna(g.mean())
data.groupby(group_key).apply(fill_mean)
Ohio          0.760579
New York      0.729209
Vermont      -0.235374
Florida      -2.195910
Oregon       -0.658126
Nevada       -1.254768
California   -1.851410
Idaho        -1.254768
dtype: float64

在另外一些情况下,我们可能希望提前设定好用于不同组的填充值。因为group有一个name属性,我们可以利用这个:

fill_values = {
  'East': 0.5, 'West': -1}
fill_func = lambda g: g.fillna(fill_values[g.name])
data.groupby(group_key).apply(fill_func)
Ohio          0.760579
New York      0.729209
Vermont       0.500000
Florida      -2.195910
Oregon       -0.658126
Nevada       -1.000000
California   -1.851410
Idaho        -1.000000
dtype: float64

数据变换

1、删除重复值

data = pd.DataFrame({
  'k1': ['one', 'two'] * 3 + ['two'],
                     'k2'</
学习数据分析是当代信息时代的一项重要技能,Python作为一种强大的编程语言,是数据分析的热门工具之一。以下是我在学习利用Python进行数据分析过程中的一些笔记。 首先,学习Python的基础知识是必不可少的。了解Python的基本语法、数据类型、循环和条件语句等知识对于数据分析的学习非常重要。我通过自学网课和阅读相关书籍,逐渐掌握了Python的基础知识。 其次,学习使用Python数据分析库。在Python中,有很多强大的数据分析库,例如NumPy、Pandas和Matplotlib等。我通过学习这些库的用法,掌握了数据的处理、清洗、分析和可视化的技巧。我学习了如何使用NumPy进行矩阵运算和数值计算,如何使用Pandas进行数据处理和数据操作,以及如何使用Matplotlib进行数据可视化。 除了数据分析库,学习Python的机器学习库也是必不可少的。机器学习在数据分析中扮演着重要角色,Python中有很多优秀的机器学习库,例如Scikit-learn和TensorFlow。我通过学习这些库的使用,了解了机器学习的基本概念和常用算法,例如回归、分类和聚类等。我也学习了如何使用这些库来构建和训练机器学习模型。 最后,实践是学习的关键。在学习的过程中,我通过实践项目来巩固所学知识。我选择了一些真实的数据集,并运用Python数据分析技术进行数据处理、分析和可视化。通过实践,我不仅掌握了数据分析的具体步骤和方法,还锻炼了自己解决实际问题的能力。 总的来说,学习利用Python进行数据分析需要掌握Python的基础知识、数据分析库和机器学习库的使用,同时也需要通过实践项目来巩固所学知识。这个过程需要持续不断的学习和实践,但是通过不断的努力和实践,我相信能够掌握Python进行数据分析的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值