demo.py(pandas,判断是否是NaN,isnull(),notnull()):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a", "b", "c", "d", "e"], columns=["WW", "XX", "YY", "ZZ"])
df.loc[["b"],["YY"]] = np.nan   # NaN是float类型,对应列会自动变成float类型。
df.loc[["d"],["XX"]] = np.nan
print(df)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
b  16  17.0   NaN  19
c  20  21.0  22.0  23
d  24   NaN  26.0  27
e  28  29.0  30.0  31
'''

# pandas判断是否是NaN
print(pd.isnull(df))
'''
      WW     XX     YY     ZZ
a  False  False  False  False
b  False  False   True  False
c  False  False  False  False
d  False   True  False  False
e  False  False  False  False
'''

# pandas判断是否不是NaN
print(pd.notnull(df))
'''
     WW     XX     YY    ZZ
a  True   True   True  True
b  True   True  False  True
c  True   True   True  True
d  True  False   True  True
e  True   True   True  True
'''

# 也可以只判断某一列的NaN
print(pd.notnull(df["XX"]))
'''
a     True
b     True
c     True
d    False
e     True
Name: XX, dtype: bool
'''


# 布尔索引
print(df[pd.notnull(df["YY"])])  # 选出"YY"列不为NaN的所有行
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
c  20  21.0  22.0  23
d  24   NaN  26.0  27
e  28  29.0  30.0  31
'''

demo.py(缺失处理,NaN的处理,直接删除NaN行,dropna(),也可以通过bool索引删除指定列为NaN的行):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a", "b", "c", "d", "e"], columns=["WW", "XX", "YY", "ZZ"])
df.loc[["b"],["YY"]] = np.nan   # NaN是float类型,对应列会自动变成float类型。
df.loc[["d"],["XX"]] = np.nan
print(df)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
b  16  17.0   NaN  19
c  20  21.0  22.0  23
d  24   NaN  26.0  27
e  28  29.0  30.0  31
'''


# NaN的处理方式一:直接删除
df1 = df.dropna(axis=0)  # axis=0表示删除行,axis=1表示删除列
print(df1)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
c  20  21.0  22.0  23
e  28  29.0  30.0  31
'''

df2 = df.dropna(axis=0, how="all")  # how="all"表示某行(列)全为NaN才会删除。how="any"表示只要有一个NaN就会删除(默认)。
print(df2)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
b  16  17.0   NaN  19
c  20  21.0  22.0  23
d  24   NaN  26.0  27
e  28  29.0  30.0  31
'''

df.dropna(axis=0, inplace=True)   # inplace=True表示原地修改,修改后的结果直接作用于原df。 默认False
print(df)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
c  20  21.0  22.0  23
e  28  29.0  30.0  31
'''

demo.py(缺失处理,NaN的处理,填充NaN,fillna()):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a", "b", "c", "d", "e"], columns=["WW", "XX", "YY", "ZZ"])
df.loc[["b"],["YY"]] = np.nan   # NaN是float类型,对应列会自动变成float类型。
df.loc[["d"],["XX"]] = np.nan
print(df)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
b  16  17.0   NaN  19
c  20  21.0  22.0  23
d  24   NaN  26.0  27
e  28  29.0  30.0  31
'''


# NaN的处理方式二:填充
df2 = df.fillna(100)  # 填充成100
print(df2)
'''
   WW     XX     YY  ZZ
a  12   13.0   14.0  15
b  16   17.0  100.0  19
c  20   21.0   22.0  23
d  24  100.0   26.0  27
e  28   29.0   30.0  31
'''

# 填充平均值
df3 = df.fillna(df.mean())  # df.mean()表示每一列的平均值(Series类型)。 df.median()中位数
print(df3)
'''
   WW    XX    YY  ZZ
a  12  13.0  14.0  15
b  16  17.0  23.0  19
c  20  21.0  22.0  23
d  24  20.0  26.0  27
e  28  29.0  30.0  31
'''

# 可以只填充某一列
df4 = df["YY"].fillna(df["YY"].mean())  # df.mean()表示每一列的平均值(Series类型)
print(df4)   # (Series类型)
'''
a    14.0
b    23.0
c    22.0
d    26.0
e    30.0
Name: YY, dtype: float64
'''
# df["YY"] = df["YY"].fillna(df["YY"].mean())  # 只填充某一列,再赋值给原df的对应列。


# df[df==0] = np.nan   # df.mean()计算均值时,NaN不会参与计算,但0会

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐