import numpy as np
data = np.genfromtxt("test.txt",delimiter=',') #也可以用其他方法读取数据
print(type(data))
print(data)
# output
<class 'numpy.ndarray'>
[[ 1. 100.]
[ 2. 90.]
[ 3. nan]
[ 4. 70.]
[ 5. nan]
[ 6. 70.]
[ 7. 85.]
[ 8. 75.]
[ 9. nan]]
从上面输出结果可以看出该数据是9行2列,其中第二列存在3个缺失值
说明:
np.isnan(data) # 判断数据是否含空值
# output
array([[False, False],
[False, False],
[False, True],
[False, False],
[False, True],
[False, False],
[False, False],
[False, False],
[False, True]])
从输出结果可以看出,非空值返回False,空值返回True
np.isnan(data[:,1]) # 查看第1列是否存在空值(下标从0开始)
np.isnan(data[2,:]) # 查看第2行是否存在空值(下标从0开始)
1.首先转换数据类型,因为上面读取数据类型为
import pandas as pd
data_pd = pd.DataFrame(data) #将数据转换成DataFrame类型
print(type(data_pd))
# output
<class 'pandas.core.frame.DataFrame'>
2.进行isnull()操作
data_pd.isnull() #效果等同于np.isnan()函数,同样会返回布尔值
data_pd[0].isnull() #判断第0列是否存在空值(下标从0开始)
data_pd[1].isnull() #判断第1列是否存在空值(下标从0开始)
data_pd[[0,1]].isnull() #判断第0列和第1列是否存在空值(下标从0开始),效果等同于data_pd.isnull()
1.统计每列的空值数量
data_pd.isnull().sum() # 统计每列的空值数量
#output 第0列0个空值,第1列3个空值
0 0
1 3
dtype: int64
2.统计每列的非空值数量
data_pd.notnull().sum()
#output
0 9
1 6
dtype: int64
3.其他相关操作
data_pd.count() # 统计所有列的非空值数量
data_pd[1].count() # 第1列非空数量(下标从0开始)
data_pd.count(axis=1) # 每行非空值数量,axis=1
1.筛选出data_pd中存在空值的行
data_pd[data_pd.isnull().values==True]
data_pd[data_pd[1].isnull()]
np.where(np.isnan(data_pd)) # data_pd中空值所在的行索引及列索引
np.where(np.isnan(data_pd[1])) # data_pd中第1列空值所在的行索引
# 用指定的数字来填充
data_pd.fillna(0) # 用0来填充data_pd中的空值
# 用指定的函数统计值来填充
data_pd.fillna(data_pd.mean()) # 用data_pd中数据的平均值来填充空值
data_pd.fillna(data_pd.mean()[1]) #指定用第1列数据均值来填充data_pd中空值
data_pd[1]=data_pd[1].fillna(data_pd[1].mean()) #指定用第1列数据均值来填充第1列数据中空值
data_pd.fillna(data_pd.sum()) # 用data_pd中数据的和来填充空值
# 使用插值法填充
data=np.genfromtxt('test.txt',delimiter=',')
data=pd.DataFrame(data)
data[1] = data[1].interpolate()
# 用字典来填充
values = {'0':6, '1': 9} # 0列空值用6填充,1列空值用9填充
data_pd.fillna(value=values)
# 用指定字符串来填充空值
data_pd.fillna("null")
#上下数据补全
# 不同的填充方式{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
# 每列的空值,用其列下方非空数值填充
data_pd.fillna(method="backfill")
data_pd.fillna(method="bfill") # 同backfill
# 每列的空值,用其所在列上方非空数值填充,若上方没有元素,保持空值
data_pd.fillna(method="ffill")
data_pd.fillna(method="pad") # 同 ffill
#limit参数设置填充空值的最大个数
data_pd.fillna(0,limit=1) # 每列最多填充1个空值,超过范围的空值依然为空
#inplace参数空值是否修改原数据data_pd
data_pd.fillna(0,inplace=True) # inplace为true,将修改作用于原数据
参考:如何处理numpy数组中的空值
Pandas+Numpy 数据中空值的处理操作:判断、查找、填充及删除