Pandas处理缺失的数据

处理丢失数据

有两种丢失数据:

  • None
  • np.nan(NaN)
import numpy as np
import pandas
from pandas import DataFrame

1. None

None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。

# 查看None的数据类型
type(None)
NoneType

2. np.nan(NaN)

np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。

# 查看np.nan的数据类型
type(np.nan)
float

3. pandas中的None与NaN

创建DataFrame

df = DataFrame(data=np.random.randint(0,100,size=(10,8)))
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 22 13 16 41 81 7 25 86
1 23 3 57 20 4 58 69 40
2 35 81 80 63 53 43 20 35
3 40 14 48 89 34 4 64 46
4 36 14 62 30 80 99 88 59
5 9 98 83 81 69 46 39 7
6 55 88 81 75 35 44 27 64
7 14 74 24 3 54 99 75 53
8 24 22 41 68 1 87 46 19
9 82 10 36 99 85 36 12 83
# 将某些数组元素赋值为nan
df.iloc[1,4] = None
df.iloc[3,6] = None
df.iloc[7,7] = None
df.iloc[3,1] = None
df.iloc[5,5] = np.nan
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 22 13.0 16 41 81.0 7.0 25.0 86.0
1 23 3.0 57 20 NaN 58.0 69.0 40.0
2 35 81.0 80 63 53.0 43.0 20.0 35.0
3 40 NaN 48 89 34.0 4.0 NaN 46.0
4 36 14.0 62 30 80.0 99.0 88.0 59.0
5 9 98.0 83 81 69.0 NaN 39.0 7.0
6 55 88.0 81 75 35.0 44.0 27.0 64.0
7 14 74.0 24 3 54.0 99.0 75.0 NaN
8 24 22.0 41 68 1.0 87.0 46.0 19.0
9 82 10.0 36 99 85.0 36.0 12.0 83.0

pandas处理空值操作

判断函数

  • isnull()
  • notnull()
df.isnull()   # 为空,显示True
df.notnull()  # 不为空,显示True

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 True True True True True True True True
1 True True True True False True True True
2 True True True True True True True True
3 True False True True True True False True
4 True True True True True True True True
5 True True True True True False True True
6 True True True True True True True True
7 True True True True True True True False
8 True True True True True True True True
9 True True True True True True True True
  • df.notnull/ isnull().any()/ all()
df.isnull()

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 False False False False False False False False
1 False False False False True False False False
2 False False False False False False False False
3 False True False False False False True False
4 False False False False False False False False
5 False False False False False True False False
6 False False False False False False False False
7 False False False False False False False True
8 False False False False False False False False
9 False False False False False False False False
df.isnull().any(axis=1)  # any表示or,axis=1表示行,即一行中存在True,即为True
0    False
1     True
2    False
3     True
4    False
5     True
6    False
7     True
8    False
9    False
dtype: bool
df.notnull().all(axis=1) # all表示and,axis=1表示行,即一行中全为True,才为True
0     True
1    False
2     True
3    False
4     True
5    False
6     True
7    False
8     True
9     True
dtype: bool
df.loc[~df.isnull().any(axis=1)] # ~表示取反

往往这样搭配:

  • isnull()->any
  • notnull()->all

df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列

df.dropna(axis=0)

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 22 13.0 16 41 81.0 7.0 25.0 86.0
2 35 81.0 80 63 53.0 43.0 20.0 35.0
4 36 14.0 62 30 80.0 99.0 88.0 59.0
6 55 88.0 81 75 35.0 44.0 27.0 64.0
8 24 22.0 41 68 1.0 87.0 46.0 19.0
9 82 10.0 36 99 85.0 36.0 12.0 83.0

填充函数 Series/DataFrame

  • fillna():value和method参数
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 22 13.0 16 41 81.0 7.0 25.0 86.0
1 23 3.0 57 20 NaN 58.0 69.0 40.0
2 35 81.0 80 63 53.0 43.0 20.0 35.0
3 40 NaN 48 89 34.0 4.0 NaN 46.0
4 36 14.0 62 30 80.0 99.0 88.0 59.0
5 9 98.0 83 81 69.0 NaN 39.0 7.0
6 55 88.0 81 75 35.0 44.0 27.0 64.0
7 14 74.0 24 3 54.0 99.0 75.0 NaN
8 24 22.0 41 68 1.0 87.0 46.0 19.0
9 82 10.0 36 99 85.0 36.0 12.0 83.0
# bfill表示后, ffill表示前
# axis表示方向: 0:上下, 1:左右
df_test = df.fillna(method='bfill',axis=1).fillna(method='ffill',axis=1)
df_test

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

0 1 2 3 4 5 6 7
0 22.0 13.0 16.0 41.0 81.0 7.0 25.0 86.0
1 23.0 3.0 57.0 20.0 58.0 58.0 69.0 40.0
2 35.0 81.0 80.0 63.0 53.0 43.0 20.0 35.0
3 40.0 48.0 48.0 89.0 34.0 4.0 46.0 46.0
4 36.0 14.0 62.0 30.0 80.0 99.0 88.0 59.0
5 9.0 98.0 83.0 81.0 69.0 39.0 39.0 7.0
6 55.0 88.0 81.0 75.0 35.0 44.0 27.0 64.0
7 14.0 74.0 24.0 3.0 54.0 99.0 75.0 75.0
8 24.0 22.0 41.0 68.0 1.0 87.0 46.0 19.0
9 82.0 10.0 36.0 99.0 85.0 36.0 12.0 83.0
# 测试df_test中的哪些列中还有空值
df_test.isnull().any(axis=0)
0    False
1    False
2    False
3    False
4    False
5    False
6    False
7    False
dtype: bool

原文地址:https://www.cnblogs.com/zyyhxbs/p/11693182.html

时间: 2024-10-09 19:25:06

Pandas处理缺失的数据的相关文章

实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据

相比较于 Numpy,Pandas 使用一个二维的数据结构 DataFrame 来表示表格式的数据, 可以存储混合的数据结构,同时使用 NaN 来表示缺失的数据,而不用像 Numpy 一样要手工处理缺失的数据,并且 Pandas 使用轴标签来表示行和列. 通常用于处理小数据(小于 100Mb),而且对计算机的性能要求不高,但是当我们需要处理更大的数据时(100Mb到几千Gb),计算机性能就成了问题,如果配置过低就会导致更长的运行时间,甚至因为内存不足导致运行失败. 在处理大型数据集时(100Gb

用pandas分析百万电影数据

用pandas分析电影数据 Lift is short, use Python. 用Python做数据分析,pandas是Python数据分析的重要包,其他重要的包:numpy.matplotlib . 安装pandas(Linux, Mac, Windows皆同): pip install pandas 电影数据来源:http://grouplens.org/datasets/movielens/ 下载数据文件解压,包含如下4个文件: users.dat 用户数据 movies.dat 电影数

小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):Pandas (二)数据结构 Series 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择 小白学

小白学 Python 数据分析(10):Pandas (九)数据运算

人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):Pandas (二)数据结构 Series 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择 小白学

小白学 Python 数据分析(11):Pandas (十)数据分组

人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):Pandas (二)数据结构 Series 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择 小白学

pandas从数据库读取数据

因为本周有一个是需要使用pandos做一个数据分析的需求,所以在这里做一下记录. Python中用Pandas进行数据分析,最常用的就是Dataframe数据结构, 这里我们主要介绍Pandas如何读取数据到Dataframe. Pandas读取Mysql数据要读取Mysql中的数据,首先要安装Mysqldb包.假设我数据库安装在本地,用户名位myusername,密码为mypassword,要读取mydb数据库中的数据,那么对应的代码如下: import pandas as pd import

pandas删除缺失数据(pd.dropna()方法)

1.创建带有缺失值的数据库: import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index = list('abcde'), columns = ['one', 'two', 'three']) # 随机产生5行3列的数据 df.ix[1, :-1] = np.nan # 将指定数据定义为缺失 df.ix[1:-1, 2] = np.nan print('\ndf1') # 输出df1,

Pandas | 17 缺失数据处理

数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构索引(reindexing),创建了一个缺少值的DataFrame. 在输出中,NaN表示不是数字的值. 一.检查缺失值 为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法  示例1

pandas基础--缺失数据处理

一下代码的前提:import pandas as p 缺失数据是数据分析中的常见现象.pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测出来的标记而已.python内置的None值也会被当作NA处理. 1 >>> string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado']) 2 >>> string_data 3 0 aardvark