最近在构建训练样本时,碰见了csv某字段为空值or缺失值的情况,导致训练报错,因此需要在构建样本后,检查各字段的完整程度。
已知:在pandas中空值表示为“”;dataframe中缺失值表示为NAN or NAT(时间)
测试发现,判断为“”、not、is None,均无法识别
import pandas as pd
df = pd.read_csv('xxxx.csv')
print(df.count())
for idx, item in df.iterrows():
q1 = item['query1']
q2 = item['query2']
if str(q1) == '':
print(q1, q2)
if q1 == '' or q2 == '':
print(q1, q2)
if not q1 or not q2:
print(q1, q2)
if q1 is None or q2 is None:
print(q1, q2)
# output
# query1 1000
# query2 1000
# dtype: int64
import pandas as pd
df = pd.read_csv('xxxx.csv')
print(df.count())
# 查看每一列是否存在NAN,如果存在则为True;否则为False
df.isnull().any(axis=0)
# 列名
# col1 False
# col2 True
# 查看每一行是否存在NAN
df.isnull().any(axis=1)
# 0 False
# 1 False
...
# 999 True
# 1000 True
# 直接查看所有数据中是否存在缺失值,速度较快,输出和axis=0一致
df.isnull().any()
# 直接判断所有数据中是否存在,直接输出True or False
df.isnull().values.any()
# 获取存在缺失值的dataframe
question_df = df[df.isnull().values==True]
import pandas as pd
df = pd.read_csv('xxxx.csv')
print(df.count())
# 查看每一列是否存在NAN,如果存在则为True;否则为False
# 输出结果同df.isnull().any(axis=0)一致
df.isna().any(axis=0)
# 列名
# col1 False
# col2 True
# 查看每一行是否存在NAN
df.isna().any(axis=1)
# 0 False
# 1 False
...
# 999 True
# 1000 True
# 直接判断所有数据中是否存在,直接输出True or False
df.isna().values.any()
# 获取、输出存在缺失值的dataframe
question_df = df[df.isna().values == True]
import pandas as pd
df = pd.read_csv('xxxx.csv')
print(df.count())
# 删除空行
df.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
# 删除缺失行
df.dropnull()
函数原型:DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数:
axis:搜索维度,axis=0表示行,axis=1表示列)
how:可以选择值‘all’ or ‘any’,"all"表示这一行或列中的元素全部缺失(NAN)才删除这一行或列,"any"表示这一行或列中只要存在元素缺失,就删除这一行或列)
thresh:行or列中,至少存在thresh个缺失值才删除
submet:在某些行(或者列)的子集中存在缺失值时,才会删除当前行或者列,结合axis决定判断行还是列
inplace:决定缺失值更新后的新数据是存为副本,还是在原数据上进行修改
函数原型:DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, kwargs)
参数:
value:填充值,用value填充缺失值、空值
method:可选择“ffill” / “backfill" / "bfill",“ffill”表示用缺失值前面一个值填充当前缺失部分;“backfill" / "bfill"表示用后面的一个值填充当前缺失部分。需要注意的是,当axis=0,需要按照列的形式从上到下进行缺失值的替换;当axis=1,按照行的形式,将前面的值填充后面的缺失值。
axis:填充维度
limit:填充缺失值的个数
参考文献:Python pandas 缺失/空值判断与处理_pandas空值怎么表示-CSDN博客