当前位置: 首页>编程语言>正文

python自带数据集二分类 划分数据集python代码

首先需要用的python包:

import pandas as pd

然后,正式开始处理数据。
1.定义一个数组

dataset=[[1,2,3,4,5],[1,2,3,None,5],[1,None,3,4,5],[1,2,3,4,5]]

2.将list类型转为pandas的DataFrame类型

df=pd.DataFrame(dataset)
print(df)

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_python,第1张

3.找到具有缺失值的数据

dataset_missing=df[df.isnull().values==True]
print(dataset_missing)

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_缺失值_02,第2张

今天做实验发现,这个方法有问题,当一行具有多个缺失值时,会返回多个行的数据,因此决定用一个笨办法:

def find_complete_rows(df):
    """
    找到DataFrame的完整数据行
    :param df:
    :return:
    """
    missing_matrix = df.isnull()
    print(missing_matrix)
    complete_rows = []
    for i in range(missing_matrix.shape[0]):
        flag = True
        for j in range(missing_matrix.shape[1]):
            if missing_matrix.iloc[i, j]:
                flag = False
                break
        if flag:
            complete_rows.append(i)

    return complete_rows

有点笨但是简单啊,不想思考了-0-

4.如果需要找到具有缺失值的列,需要做两步操作

#1判断哪些列存在缺失值(返回的是Series类型的数据)
coloums_missing_status=df.isnull().any()

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_缺失值_03,第3张

#2找到缺失列的列,用to_list()方法返回list
coloums_missing=coloums_missing_status.index[coloums_missing_status==True].to_list()

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_数据_04,第4张

5.找到没有缺失值的数据,也需要两步

#1根据前面找到的缺失数据,获得缺失值的列名(返回的list)
missing_index=dataset_missing.index.to_list()
print(missing_index)

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_缺失值_05,第5张

#2在原始数据中去除有缺失值的行
dataset_complete=df.loc[~df.index.isin(missing_index)]
print(dataset_complete)

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_python自带数据集二分类_06,第6张

最后附上所有代码

import pandas as pd

"""
input: Full dataset
output: Missing dataset and Complete dataset
"""
def split_dataset(dataset):
    #将list类型转为pandas的DataFrame类型
    df=pd.DataFrame(dataset)
    print(df)
    #找到具有缺失值的数据
    dataset_missing=df[df.isnull().values==True]
    print(dataset_missing)
    
    #如果需要找到具有缺失值的列,需要做两步操作
    #1判断哪些列存在缺失值(返回的是Series类型的数据)
    colums_missing_status=df.isnull().any()
    print(colums_missing_status)
    #2找到缺失列的列,用to_list()方法返回list
    colums_missing=colums_missing_status.index[colums_missing_status==True].to_list()
    print(colums_missing)
    coloums_missing=coloums_missing_status.index[coloums_missing_status==True].to_list()
    print(coloums_missing)
    
    #找到没有缺失值的数据,也需要两步
    #1根据前面找到的缺失数据,获得缺失值的列名(返回的list)
    missing_index=dataset_missing.index.to_list()
    print(missing_index)
    #2在原始数据中去除有缺失值的行
    dataset_complete=df.loc[~df.index.isin(missing_index)]
    print(dataset_complete)

    return dataset_missing,dataset_complete

if __name__=='__main__':
    #定义一个数组
    dataset=[[1,2,3,4,5],[1,2,3,None,5],[1,None,3,4,5],[1,2,3,4,5]]
    dataset_missing,dataset_complete=split_dataset(dataset)

=======================================
今天突然发现,如果在一行数据中存在多个缺失值,就不能用上面的步骤获得缺失数据了,因为会重复。那么,如果一行数据中存在多个缺失值,获得缺失数据的方法如下:
Pandas居然有自带的去Nan方法

//使用pandas自带的dropna()方法:
#删除表中某行全部为NaN的行 
nonan_df = df.dropna(axis=0, how='all') 
#删除表中某行含有任何NaN的行
nonan_df = df.dropna(axis=0, how='any')
#删除表中有NaN的任意行
nonan_df = df.dropna(axis=0)
“”“
补充:
删除行的参数axis = 0
删除列的参数axis = 1
”“”

当一行数据有多个缺失值时,查看有nan的行

#1 查看含有nan的行
dataset_missing=df[df.isna().any(axis=1)]
#2 查看不含nan的行
dataset_complete=df[~df.isna().any(axis=1)]

新的代码如下

def split_dataset(dataset):
    #将list类型转为pandas的DataFrame类型
    df=pd.DataFrame(dataset)
    print('------初始数据-------')
    print(df)
    #找到具有缺失值的数据,需要两步
    #1 查看含有nan的行
    dataset_missing=df[df.isna().any(axis=1)]
    #2 查看不含nan的行
    dataset_complete=df[~df.isna().any(axis=1)]
    
    #判断各列的缺失情况
    colums_missing_status=dataset_missing.isna().any()#判断的数据小一些
    colums_missing=colums_missing_status[colums_missing_status==True].index.to_list()
    print('------有nan的缺失数据-----------')
    print(dataset_missing)
    print('------无nan的完整数据-----------')
    print(dataset_complete)
    print('------有nan的列-----------')
    print(colums_missing)

if __name__=='__main__':
    #定义一个数组
    dataset=[[1,2,3,4,5],[1,None,None,None,5],[1,None,3,4,5],[1,2,3,4,5]]
    split_dataset(dataset)

运行结果

python自带数据集二分类 划分数据集python代码,python自带数据集二分类 划分数据集python代码_python自带数据集二分类_07,第7张



https://www.xamrdz.com/lan/5fp1963897.html

相关文章: