系列文章目录
提示:仅记录个人的学习心得,欢迎交流
(占位,以后再补 ……………………)
前言
对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中展现更高的维度。
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的形式返回。
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索引对象可以包含重复标签,根据重复标签进行筛选会选取所有重复标签对应的数据。