Python使用Pandas判断csv等格式文件中缺失字段

        最近在构建训练样本时,碰见了csv某字段为空值or缺失值的情况,导致训练报错,因此需要在构建样本后,检查各字段的完整程度。

        已知:在pandas中空值表示为“”;dataframe中缺失值表示为NAN or NAT(时间)

1. 先看旧的无效代码

        测试发现,判断为“”、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

2. dataframe中判断是否存在缺失值、获取缺失值部分

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]

3. dataframe中判断是否存在NAN、获取NAN部分 

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]

4. 删除含有空值、缺失值的行或者列

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:决定缺失值更新后的新数据是存为副本,还是在原数据上进行修改

5. 填充含有空值、缺失值的行或者列

函数原型: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博客

你可能感兴趣的:(自然语言处理NLP,python,pandas,开发语言)