第5章 pandas入门

it2023-10-07  73

5.1 pandas的数据结构介绍

pandas有两个数据结构:Series 和 DataFrame

Series

Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及 一组与之相关的数据标签(即索引)组成。

Series的字符串表现形式为: 索引在左边,值在右边。.values返回值,.index返回索引值

obj = pd.Series([4, 7, -5, 3]) >> obj >0 4 1 7 2 -5 3 3 dtype: int64

自定义数据点标记索引:

obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', ' c']) >> obj >d 4 b 7 a -5 c 3 dtype: int64

pd.Series(arg,Index=None) 可直接把字典转换成Series。可通过一个拍好顺序的键值列表,改变字典转换成Series后的顺序。

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

在这个例子中,sdata中跟states索引相匹配的那3个值会被找出来并放到相应的位 置上,但由于"California"所对应的sdata值找不到,所以其结果就为NaN(即“非数 字”(not a number),在pandas中,它用于表示缺失或NA值)。因为‘Utah’不在 states中,它被从结果中除去。

pandas的isnull和notnull函数可用于检测缺失数据

Series最重要的一个功能是,它会根据运算的索引标签自动对齐数据

Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关 系非常密切:

DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值 类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被 看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多 个二维块存放的(而不是列表、字典或别的一维数据结构)。

创建DataFrame最常用的办法,直接传入一个由等长列表或Numpy数组组成的字典:

结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列: 对于特别大的DataFrame, head方法会选取前5行:

DataFrame指定列排列: 获取DataFrame数据中的一个Series。1.frame2[‘state’] 2. frame2.year

通过loc属性,返回DataFrame某一Series列可以通过赋值的方式进行修改。frame2[‘debt’] = 16.5. 如果赋值的是Series, 会精确匹配DataFrame的索引,所有的空位都将被填上空缺值。

为不存在的列赋值会创建出一个新列。关键字del用于删除列。

嵌套的字典给DataFrame, pandas就会被解释为:外层字典的键作为列,内层键则作为行索引:

.T 方法DataFrame转置

设置DataFrame的index 和 colomns的name属性,设置的DataFrame的index和coloumns的name也会被显示出来。

索引对象

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或 DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。 index对象是不可变的,因此用户不能对其进行修改:

5.2 基本功能

重新索引,reindex方法

obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c']) obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])

对于上面代码中,obj2的’e’,引入缺失值代替。

对于时间序列这类有序数据,重新索引时可能需要做一些插值处理。

丢弃指定轴上的项

drop方法,指定键删除指定行的Series, 传入drop(key, axis = ‘N’ )删除行的值

drop函数修改Series 或 DataFrame的大小或形状,不返回新的对象。

索引,选取和过滤

切片与python方式相同,不过前后端都是包含的,也可通过切片获得某一列的内容。

用数字 或 值 索引,得到行 或 列数据。

用loc和iloc进行选取

使用轴标签(loc) 或 整数索引(iloc),从 DataFrame选择行和列的子集。

整数索引

pandas的整数索引与Python内置的列表和元组的索引语法不同。

如果轴索引含有整数,数据选取总会使用标签。为了更准确,请使 用loc(标签)或iloc(整数):

算术运算和数据对齐

pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。在将对象相 加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传 播。一个DataFrame与另外一个DataFrame相加,对齐操作会同时发生在行和列上,把它们相加后将会返回一个新的DataFrame,其索引和列为两个相加DataFrame的并集。如果两个DataFrame对象相加,没有共用的行或列标签,结果都会是空

在算术方法中填充值

arr1.add(arr2, fill_value=0),在没有交集的地方填充0值。

整个DataFrame取倒数,第一个方法是直接1 / df1 ,第二个方法是 arr1.rdiv(1)

DataFrame 和 Series之间的运算

直接相减 或者使用sub()函数

函数应用和映射

排序和排名

sort_index()方法, 返回一个已排序号的新对象。并可以传参选者任一轴进行排序。

排序时,任何缺失值默认都会被放到Series的末尾

使用sort_values的by选项:根据一个或多个列中的值进行排序: frame.sort_values(by=‘arg’)

rank函数:为各组分配一个平均排名的方法破坏平级关系

带有重复标签的轴索引

is_unique属性判断值是否唯一

5.3 汇总和计算描述统计

sum()函数返回一个含有一个列和行的Series, 并可传入参数axis选者按行求和还是列

describe()返回一次性产生多个汇总统计。

唯一值,值计数以及成员资格

unique()方法返回一个Series中的唯一值数组

value_counts 用于计算一个Series中各值出现的频率

最新回复(0)