系列文章目录

提示:仅记录个人的学习心得,欢迎交流

(占位,以后再补 ……………………)


前言

对python语言基础中记忆不牢的进行总结,希望自己能坚持下去!为了学习计算机视觉做准备!

本次介绍本书第五章的内容。最近在做图像细粒度识别,数据集标签错误,重复,导致模型识别度不是很好,所以先要清洗数据,希望能赶快掌握相关函数啊!加油!!!


一、pandas数据结构

1.1 Series

Series数据由一个值序列和数据标签(索引)组成。

Series的标签是object类型的,索引标签的数据类型可以为不同类型的数据。当然我们也可以用一个已有的字典生成一个Series。

Series的索引和numpy的数据索引类似,也可以通过布尔值进行选择。

import pandas as pd
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000,  'Utah': 5000}
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj = pd.Series(sdata, index=states)
print(obj)
>>> California        NaN
    Ohio          35000.0
    Oregon        16000.0
    Texas         71000.0
    dtype: float64

obj_02 = pd.Series(sdata)
print(obj_02)
>>> Ohio      35000
    Texas     71000
    Oregon    16000
    Utah       5000
    dtype: int64

print(obj + obj_02)
>>> California         NaN
    Ohio           70000.0
    Oregon         32000.0
    Texas         142000.0
    Utah               NaN
    dtype: float64

num = [1, 2, 3, 4]
obj_02.index = num
print(obj_02)
>>> 1    35000
    2    71000
    3    16000
    4     5000
    dtype: int64

在初始化Series的时候,索引数目必须和数据的数目一一对应,但如果从字典生成或者已有的Series更改其索引是,没有对应的数据的索引会被赋值NaN。

Series数据是可以相加运算,将相同索引的数据值相加,其他的元素相当于求并集。

Series的索引可以通过按位置赋值的方式进行改变。

1.2 DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做共享相同索引的Series的字典。利用分层索引可以在DataFrame中展现更高的维度。

python数据分析与应用第二版第二章实训答案 python数据分析基础第二版_python

import pandas as pd

data = [['Google',10],['Runoob',12],['Wiki',13,2022]]
df = pd.DataFrame(data,columns=['Site','Age','Year'],
                  index=['one','two','three'])
print(df)
>>>          Site  Age    Year
    one    Google   10     NaN
    two    Runoob   12     NaN
    three    Wiki   13  2022.0

print(df.Site)                                       
>>> one      Google
    two      Runoob                                  
    three      Wiki
    Name: Site, dtype: object

print(df['Age'])
>>> one      10
    two      12
    three    13
    Name: Age, dtype: int64

print(df.loc['three'])
>>> Site      Wiki
    Age         13
    Year    2022.0
    Name: three, dtype: object

print(df[df.Year==2022])
>>>        Site  Age    Year
    three  Wiki   13  2022.0

所传的列如果不包含在字典的数据中会报错,和书上说的出现缺失值不同。只有数据不全才会出现缺失值(Python 3.9),并且df.[colunm]以及df.Site两种方法都必须在下标有效的时候才能使用,和书中的也所不同。DataFrame中的一列可以按字典标记或者属性那样检索为Serie。

行也可以通过位置或者特殊属性loc进行选取。当我们将列表或者数组赋值给一个列时,值的长度必须和DataFrame的长度匹配。用Series进行赋值的时候将会在空缺的地方填充缺失值,如果被赋值的列不存在,则会产生一个新的列。

从DataFrame中选取的列是数据的视图,而不是拷贝。因此对Series的修改会映射到DataFrame中,如果需要复制,需要显示的使用Series的copy方法。

嵌套字典被赋值给DataFrame,pandas会将字典的键作为列,将内部的键作为行索引:

import pandas as pd

pop = {'Nevada': {2002: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = pd.DataFrame(pop)
print(frame)
>>>       Nevada  Ohio
    2002     2.9   3.6
    2000     NaN   1.5
    2001     NaN   1.7

print(frame.T)
>>>         2002  2000  2001
    Nevada   2.9   NaN   NaN
    Ohio     3.6   1.5   1.7

print(frame.values)
>>> [[2.9 3.6]
     [nan 1.5]
     [nan 1.7]]

DataFrame的values属性会将包含在DataFarme中的数据以二维ndarray的形式返回。

python数据分析与应用第二版第二章实训答案 python数据分析基础第二版_python_02

1.3 索引对象

 在构造Series或DataFrame时,所使用的任意数组和标签序列都可以在内部转换为索引对象。索引对象是不可变的(对单个索引),但是可以整体替换的。

import pandas as pd

pop = {'Nevada': {2002: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = pd.DataFrame(pop)
print(frame.index)
>>> Int64Index([2002, 2000, 2001], dtype='int64')

frame.index[2002] ='c'
print(frame.index)
>>> TypeError: Index does not support mutable operations

frame.index =['a','b','c']
print(frame.index)
>>> Index(['a', 'b', 'c'], dtype='object')

frame.index =['a','a','c']
print(frame[frame.index == 'a'])
>>>    Nevada  Ohio
    a     2.9   3.6
    a     NaN   1.5

pandas索引对象可以包含重复标签,根据重复标签进行筛选会选取所有重复标签对应的数据。

python数据分析与应用第二版第二章实训答案 python数据分析基础第二版_赋值_03