这里用到的对象是不含空格输入的DataFrame。
判断数值型:
print(arr[pd.isna(arr['numTest'])==True])
print(arr[pd.isnull(arr['numTest'])==True])
print(arr[np.isnan(arr['numTest'])==True])
# print(arr[np.isnat(arr['numTest'])==True]) #这一句报错:TypeError: ufunc 'isnat' is only defined for datetime and timedelta.
输出结果都是:
numTest timeTest strTest strTest_1
2 NaN 2019-08-10 NaN nan
4 NaN NaT four four
判断时间型:
print(arr[pd.isna(arr['timeTest'])==True])
print(arr[pd.isnull(arr['timeTest'])==True])
# print(arr[np.isnan(arr['timeTest'])==True]) #这一句报错:TypeError: ufunc 'isnan' not supported for the input types
print(arr[np.isnat(arr['timeTest'])==True])
# print(arr[arr['timeTest']==pd.NaT]) #这一句返回空的DataFrame
输出结果都是:
numTest timeTest strTest strTest_1
3 3.0 NaT three three
4 NaN NaT four four
判断字符串型:
print(arr[pd.isna(arr['strTest'])==True])
print(arr[pd.isnull(arr['strTest'])==True])
# print(arr[np.isnan(arr['strTest'])==True]) #这一句报错:TypeError: ufunc 'isnan' not supported for the input types
# print(arr[np.isnat(arr['strTest'])==True]) #这一句报错:TypeError: ufunc 'isnat' is only defined for datetime and timedelta
输出结果:
numTest timeTest strTest strTest_1
2 NaN 2019-08-10 NaN nan
5 4.0 2020-08-10 NaN nan
判断更改类型后的列:
# print(arr[pd.isna(arr['strTest'])==True]) #这一句返回空的DataFrame
# print(arr[pd.isnull(arr['strTest_1'])==True]) #这一句返回空的DataFrame
# print(arr[np.isnan(arr['strTest_1'])==True]) #这一句报错:TypeError: ufunc 'isnan' not supported for the input types
# print(arr[np.isnat(arr['strTest_1'])==True]) #这一句报错:TypeError: ufunc 'isnat' is only defined for datetime and timedelta
# print(arr[arr['strTest_1']==np.nan]) #这一句返回空的DataFrame
print(arr[arr['strTest_1']=='nan'])
输出结果:
numTest timeTest strTest strTest_1
2 NaN 2019-08-10 NaN nan
5 4.0 2020-08-10 NaN nan
通过以上的实验,我们可以知道:
1、判断数值是否为空,可以用pd.isna,pd.isnull,np.isnan;
2、判断字符串是否为空,可以用pd.isna,pd.isnull;
3、判断时间是否为空,可以用pd.isna,pd.isnull,np.isnat;
4、判断转换类型后的字符串,空值也转换成了字符串nan,所以不能用常规方法判断了,直接判断字符串是否相等即可。
实际项目中有这样的需求,将某一列的值,映射成类别型的数据,这个时候,需要我们将范围等频切分,或者等距切分。
具体的做法可以先看某一些特征的具体分布情况,然后我们选择合适的阈值进行分割。
def age_map(x):
if x < 26>=26 and x <= 35:
return 1
elif x > 35 and x <= 45:
return 2
elif pd.isnull(x): #判断是否为NaN值,== 和in 都无法判断
return 3
else:
return 4
也就是用pandas自带的函数来表示:
2.series和dataframe不一样,条件判断时直接“ series == 某值 ”获得所有索引,而dataframe需要dataframe['列名' ] == 某值 或“ dataframe.列名 == 某值 ”,来获得索引。print( df_2[ s_1 == False ] ) #得到series等于False的行索引,就可以用另一个表格通过这个索引值来操控其他需要的表格如df_2了。1.判断某列为空值,用pd.isna(df['列名'])方法,获得数据为True和False的series。
pandas基于numpy,所以其中的空值nan和numpy.nan是等价的。numpy中的nan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。
对于pandas中的空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢?
可以判断pand......
在pandas中,如果需要查看column的类型,一般使用
df.dtypes方法,它将返回每个列的数据类型。但实践中,有时会出现需要包含多种数据类型的场景,或者dataFrame包含的表格出错,出现了多种数据类型。为了观察dataFrame中的所有类型在列中的分布情况,我们写了对应的检查函数。
df.isna():与 df.isnull() 等价。
df.notnull():与 df.isnull() 相反,返回一个布尔类型的数据框,表示各个位置是否不是空值。
import pandas as pd
df = pd.DataFrame({'A': ...
dates = pd.date_range("20200307", periods=4)
df1 = pd.DataFrame(np.arange(12).reshape(4, 3), index=dates, columns=["A", "B", "C"])
df2 = pd.Da...
有时我们用pandas读取Excel去获取某列或者某几列的值,并需要对该列的值进行处理,首先要判断该列是否有空值,若有空值不做判断可能程序会报错,比如用正则表达式去匹配该列的所有单元格的值,这时若某个单元格为空值则会报错。
我们可以将空值找出,并做判断,若不为空再进行匹配;
正常情况pandas读取的空值都会显示NaN,若我们用df[i] == np.nan 去判断这显示为False,i这里代表索引。达不到我们想要的目的,建议用df.isnull()进行判断。
这里我们知道第二行