Advertisement

机器学习随笔(1)——pandas.DataFrame和数据清洗

阅读量:

目录

1. pandas.DataFrame

2. 数据清洗


当我试图深入掌握机器学习基础时,意识到这些基础知识还未完全稳固,并且许多用法难以掌握。为了巩固所学内容并便于后续复习,特此笔记来回顾一下。

1. pandas.DataFrame

以下是官方参考链接:

pandas.DataFrame — pandas 1.4.4 documentation (pydata.org)

菜鸟编程中的讲解:

Pandas 中的数据结构——DataFrame | 菜鸟教程

首先,我们看一下DataFrame的构造方法。

复制代码
 pandas.DataFrame( data, index, columns, dtype, copy)

    
 '''
    
 参数说明:
    
   5. data:一组数据(ndarray、series, map, lists, dict 等类型)。
    
   7. index:索引值,或者可以称为行标签。
    
   9. columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
    
   11. dtype:数据类型。
    
   13. copy:拷贝数据,默认为 False。
    
 '''

通常我们最多用到data, index, columns。

代码展示如下:

复制代码
 import pandas as pd

    
 data = [['Tom',18],['Bob',20],['Jim',30]]
    
  
    
 df = pd.DataFrame(data,columns = ['Name','Age'],index = ['a','b','c'])
    
 df

运行结果如下:

一般不建议采用这种方法。因为我们使用字典形式的数据就能实现目标,并且无需特别关注列标签与索引除非我们有特殊需求

复制代码
 import pandas as pd

    
 data = {'Name':['Tom','Bob','Jim'],'Age':[18,20,30]}
    
  
    
 df = pd.DataFrame(data)
    
 df

运行结果如下:

注意,下面这种写法和上面是一样的。

复制代码
 import pandas as pd

    
 data = [{'Name':'Tom','Age':18},{'Name':'Bob','Age':20},{'Name':'Jim','Age':30}]
    
  
    
 df = pd.DataFrame(data)
    
 df

运行结果如下:

2. 数据清洗

数据清理是执行无用数据处理的流程。
大量存在格式错误、错误值或重复值等问题的数据集,
为了提高数据分析的准确性,
必须解决这些问题中的无用数据问题。

数据清理是执行无用数据处理的流程。
大量存在格式错误、错误值或重复值等问题的数据集,
为了提高数据分析的准确性,
必须解决这些问题中的无用数据问题。

参考链接:

Pandas 数据清洗 | 菜鸟教程 (runoob.com)

大家可以去该链接下载所需数据文件。

首先载入数据:

复制代码
 import pandas as pd

    
 df = pd.read_csv('E:/PYTHON/property-data.csv')
    
 df.head(10)

运行结果如下:

我们可以通过 isnull() 判断各个单元格是否为空。

复制代码
 print (df['NUM_BEDROOMS'])

    
 print (df['NUM_BEDROOMS'].isnull())

运行结果如下:

复制代码
 0      3

    
 1      3
    
 2    NaN
    
 3      1
    
 4      3
    
 5    NaN
    
 6      2
    
 7      1
    
 8     na
    
 Name: NUM_BEDROOMS, dtype: object
    
 0    False
    
 1    False
    
 2     True
    
 3    False
    
 4    False
    
 5     True
    
 6    False
    
 7    False
    
 8    False
    
 Name: NUM_BEDROOMS, dtype: bool

如前所述,在某些情况下,**isnull()**并未将na视为空数据。然而我们可以通过自定义的方式设定空数据类型以满足特定需求。

复制代码
 missing_values = [ "na",]

    
 df = pd.read_csv('E:/PYTHON/property-data.csv', na_values = missing_values)
    
  
    
 print (df['NUM_BEDROOMS'])
    
 print (df['NUM_BEDROOMS'].isnull())

运行结果如下:

复制代码
 0    3.0

    
 1    3.0
    
 2    NaN
    
 3    1.0
    
 4    3.0
    
 5    NaN
    
 6    2.0
    
 7    1.0
    
 8    NaN
    
 Name: NUM_BEDROOMS, dtype: float64
    
 0    False
    
 1    False
    
 2     True
    
 3    False
    
 4    False
    
 5     True
    
 6    False
    
 7    False
    
 8     True
    
 Name: NUM_BEDROOMS, dtype: bool

如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:

复制代码
 DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    
 '''
    
 参数说明:
    
   5. axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
    
 how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
    
 thresh:设置需要多少非空值的数据才可以保留下来的。
    
 subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
    
 inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
    
 '''

下面我们演示一下删除包含空数据行后的结果:

复制代码
 df.dropna(inplace = True)

    
 df

运行结果如下:

然而,在我们的数据集样本数量极少的情况下,通常会采取针对缺失值的处理方法或填补空白数据的技术。

复制代码
 df = pd.read_csv('E:/PYTHON/property-data.csv')

    
 df.fillna(666, inplace = True)#替换所有空数据
    
 print(df)
    
 print('###############################################################################')
    
 df = pd.read_csv('E:/PYTHON/property-data.csv')
    
 df['PID'].fillna(666, inplace = True)#替换指定列空数据
    
 print(df)
    
 print('###############################################################################')
    
 df = pd.read_csv('E:/PYTHON/property-data.csv')
    
 x = df["ST_NUM"].mean()
    
 df["ST_NUM"].fillna(x, inplace = True)#使用均值替换指定列空数据
    
 print(df)
    
 print('###############################################################################')
    
 df = pd.read_csv('E:/PYTHON/property-data.csv')
    
 x = df["ST_NUM"].median()
    
 df["ST_NUM"].fillna(x, inplace = True)#使用中位数替换指定列空数据
    
 print(df)
    
 print('###############################################################################')
    
 df = pd.read_csv('E:/PYTHON/property-data.csv')
    
 x = df["ST_NUM"].mode()
    
 df["ST_NUM"].fillna(x, inplace = True)#使用众数替换指定列空数据
    
 print(df)

全部评论 (0)

还没有任何评论哟~