Python训练营打卡Day4

初识pandas库与缺失数据的补全

按照示例代码的要求,去尝试补全信贷数据集中的数值型缺失值

  1. 打开数据(csv文件、excel文件)
  2. 查看数据(尺寸信息、查看列名等方法)
  3. 查看空值
  4. 众数、中位数填补空值
  5. 利用循环补全所有列的空值

完成后在py文件中独立完成一遍,并且利用debugger工具来查看属性(不借助函数显式查看)----养成利用debugger工具的习惯

一.数据的读取和查看

【引用相对路径,前面加r,可将转义字符默认为字符串(避免干扰)

代码书写规范—空格

pandas里有两结构,DataFrame(两列以上,常见)和series(一列)

1.读取数据

import pandas as pd

data = pd.read_csv(r'data.csv')

data2 =pd.read_excel('data.xlsx')

【引用相对路径,前面加r,将转义字符默认为字符串

代码书写规范—空格

pandas里有两结构,DataFrame(两列以上,常用)和series(一列)pandas.core.frame.DataFrame

2.数据信息的查看

此时data是一个dataframe类型的对象,可以理解为dataframe类的实例。实例就具有类的属性和方法。

【方法 :人.跳舞()

属性:人.年龄】

1. 属性的调用格式为:实例名.属性名。

2. 方法的调用格式为:实例名.方法名()

type(data)    # 可查看任何一类数据结构
data.info()   # 列名、非空值、数据类型   
data.shape    # (行数, 列数) data的属性      
data.columns  # 所有列名 data的属性   
data.describe()  # 数值列的基本统计量(分布情况)  
data.dtypes   # dtype是data type的缩写,用于描述数据类型。后续会频繁借助这个方法来查看某一列数据的属性 [info()中的一部分]
data["Annual Income"].dtype  # 查看某一列的数据类型【字符串】  
data.isnull()            # 布尔矩阵显示缺失值,这个方法返回一个布尔矩阵,也是dataframe对象,其中True表示对应位置的值是缺失值,False表示对应位置的值不是缺失值。
data.isnull().sum()      # 每列缺失值计数,sum方法为求每一列的和
data.head(10)            # 查看前10行信息。默认前5行
【pandas无法直接读取.xlsx等文件,需安装openpyxl库。可直接在jupyter中安装——!pip install openpyxl
一维数组不带1——(7500,)一维数组】

二.缺失值的填补

1.用中位数进行填补

data['Annual Income']
type(data['Annual Income']) # dataframe里单独的一列是series
median_income = data['Annual Income'].median()  # 计算 'Annual Income' 列的中位数(会自动忽略 NaN 值)
data['Annual Income'].fillna(median_income, inplace=True)  
# 使用计算出的中位数填补该列的 NaN 值
# inplace=True 参数表示直接在原 DataFrame 上进行修改
# 如果不设置该参数,fillna() 方法会返回一个新的 DataFrame,原 DataFrame 不会被修改
data['Annual Income'].isnull().sum()  # 检查下是否有缺失值

2.用众数进行填补

import pandas as pd
data = pd.read_csv('data.csv') # 需要重新读取一遍数据
mode = data['Annual Income'].mode()
# mode() 会返回数据中出现频率最高的所有值,如果频次相同,会返回最多每个值。
mode
mode = mode[0]  # 这里返回了4个最多频次的值,我们一般保留第一个
data['Annual Income'].fillna(mode, inplace=True) # 众数填补
data['Annual Income'].isnull().sum() # 检查下是否有缺失值

三.填补所有的数值型缺失值【循环】

tolist方法,将numpy数组和pandas对象转换成list

data.columns
ype(data.columns)
#想要遍历打印这个对象中的每一个元素,如果是数值,就补全缺失值。
import numpy as np
a =np.array([1,2,3])
a.tolist()
【c = data.columns.tolist()
type(c)】
# 循环遍历c这个列表中的每一列
for i in c:
    # 找到为数值型的列
    if data[i].dtype != 'object': # 找到为数值型的列
        if data[i].isnull().sum() > 0: # 找到存在缺失值的列
            #计算该列的均值
            mean_value = data[i].mean()
            #用均值填充缺失值
            data[i].fillna(mean_value, inplace=True)

data.isnull().sum()

@浙大疏锦行

你可能感兴趣的:(Python训练营,python)