Python其实很简单 第十九章 Pandas之Series与DataFrame

Python其实很简单 第十九章 Pandas之Series与DataFrame,第1张

一维数组情况:

二维数组情况:

3参数情况:

2参数情况:

1参数情况:

一维情况:

二维情况:

一维情况:

二维情况:

一维情况:

二维情况:第三个参数指定维度

只查看行数、或者列数

逗号隔开两个索引

某些行

某些列

可以看出append()函数在二维数组中添加元素,结果转为了一维数组。

那怎么保持二维数组呢?可以设置axis参数按行或者按列添加

可以看出先把二维数组降成了一维数组,再在索引为1的位置添加元素。

那么怎么保持在二维添加元素呢? 同样设置axis参数

也分按行和按列删除

标记缺失值: isnan()函数

补充缺失值:

同样axis参数可以指定拼接按行还是按列

2 hstack()函数:以水平堆叠的方式拼接数组

3 vstack()函数:以垂直堆叠的方式拼接数组

第二个参数还可以是数组,指定拆分的位置

hsplit()函数:横向拆成几个数组

vsplit()函数:纵向拆成几个数组

数组与数组之间的运算

数组与数值的运算

可以指定整个数组求和,还是按行或者按列

axis=0:每一列的元素求和

axis=1:每一行的元素求和

axis=0:每一列求均值

axis=1:每一行求均值

axis=0:每一列求最大值

axis=1:每一行求最大值

pandas有两个重要的数据结构对象:Series和DataFrame。

Series是创建一个一维数组对象,会自动生成行标签。

会自动生成行列标签

也可以用字典形式生成数据

在用字典生成数据的基础上,同时指定行标签

例如对下表的数据进行读取

4月是第四个表,我们应把sheet_name参数指定为3;因为索引是从0开始的。

可以看出read_excel()函数自动创建了一个DataFrame对象,同时自动把第一行数据当做列标签。

可以看出不给出header参数时,该参数默认为0。

header=1时结果如下:

header=None时结果如下:

index_col=0时,第0列为列标签

index_col=0时

usecols=[2]:指定第二列

指定多列

数据如下:

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-j1SHxY8y-1637655972909)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211114192949607png)]

nrows=3时

head()函数中参数为空默认前5行

指定head(3)时如下

numpy模块也是shape

查看特定列的书库类型

特定列数据类型转换

先查看一下所有数据

与单行相比,结果显示的格式不一样了

iloc()挑选:

或者给出区间

挑选数据要么标签,要么索引挑选

或者

或者写成区间

标签挑选

或者索引挑选

先查看一下数据

或者用字典一对一修改

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-a6QKIoie-1637655972912)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211123110431201png)]

isin()函数查看表中是否有该值

查看特定列是否有该值

可以看出上述代码并没有替换,那怎么替换呢?

末尾插入一列

指定插入到哪列

axis参数可以指定删除行还是删除列

指定标签删除

指定索引删除

方法三

指定行标签删除

指定索引删除

方法三:

先查看所有数据

info()函数查看数据类型,还可以查看是否有缺失值

isnull()函数查看是否有缺失值

在numpy模块中用isnan()函数

删除有缺失值的行

删除整行都为缺失值的行: 需要指定how参数

不同列的缺失值设置不同的填充值

默认保留第一个重复值所在的行,删除其他重复值所在的行

保留第一个重复值所在的行

保留最后一个重复值所在的行

是重复的就删除

降序如下

参数指定first时,表示在数据有重复值时,越先出现的数据排名越靠前

获取产品为单肩包的行数据

获取数量>60的行数据

获取产品为单肩包 且 数量>60 的行数据

获取产品为单肩包 或 数量>60 的行数据

stack()函数转换成树形结构

how参数指定外连接

on参数指定按哪一列合并

concat()函数采用 全连接 的方式,没有的数设置为缺失值

重置行标签

效果与concat()一样

末尾添加行元素

指定列求和

指定列求均值

指定列求最值

获取单列的

corr()函数获取相关系数

获取指定列与其他列的相关系数

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-46g9qgQw-1637655972913)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211123135643804png)]

groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。

分组后获取指定列的汇总情况

获取多列的汇总情况

获取多列的情况

ta = pdread_excel(‘相关性分析xlsx’)

print(data)

corr()函数获取相关系数

获取指定列与其他列的相关系数

[外链转存中…(img-46g9qgQw-1637655972913)]

groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。

分组后获取指定列的汇总情况

获取多列的汇总情况

获取多列的情况

pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包,可以快速地处理大规模数据。pandas主要有三种数据结构,所有的 *** 作也都是基于这三种结构而来的。

这里,最常用的是二维的DataFrame表格型结构,其次是一维的Series序列型结构,至于三维的Panel实际使用情况较少,我们暂不讨论。在使用之前,别忘了导入包。

Series 是一种一维的数组结构,主要由索引(标签)和数据值组成,能够保存任何数据类型(整型,浮点型,字符串或其他Python对象类型)。其中,索引类似于数组的下标,只不过series的索引不仅可以是数字,还可以是字符串,日期等类型。而数据值部分,不要求所有元素的类型完全相同,可以是任意类型。下图所示的就是典型的Series结构,左边是字符索引,右边是对应的值,看起来好像竖起来的数组。

DataFrame是一个二维索引的数据结构,类似于表格型结构,它的列可以存在不同的类型。你可以把它简单的想成Excel表格或SQL Table,它的每个列都是一个Series结构。它是最常用的Pandas对象,没有之一。DataFrame主要由行索引,列索引和数据值三部分构成。与Series一样,DataFrame的索引类型是多样的,数据值的类型也不做限制。

Panel是一个三维结构,由DataFrame组成,使用较少,暂不讨论。

可以指定整个DataFrame或各个列的数据类型:

pandas提供了多种方法来确保列仅包含一个dtype。例如,可以使用read_csv()的converters参数:

或者,可以在读取数据后使用to_numeric()函数强进行类型转换。

可以通过指定dtype ='category'或dtype = CategoricalDtype(类别,有序)直接解析类别列。

可以使用dict指定将某列为Category类型:

指定dtype ='category'将导致无序分类,其类别是数据中观察到的唯一值。

要更好地控制类别和顺序,可以创建CategoricalDtype,然后将其传递给该列的dtype。

使用dtype = CategoricalDtype时,dtypecategories之外的“意外”值将被视为缺失值。

文件可能包含标题行,也可能没有标题行。 pandas假定第一行应用作列名:

通过指定name与header,可以重命名列以及是否丢弃标题行:

如果标题不在第一行中,则将行号传递给标题,将跳过header前面的行:

如果文件或标题包含重复的名称,默认情况下,pandas会将它们区分开,以防止覆盖数据

usecols参数允许您使用列名,位置号或可调用的方法选择文件中列的任何子集

如果指定了comment参数,则将忽略注释行。 默认情况下,空行也将被忽略。

如果skip_blank_lines = False,则read_csv将不会忽略空行:

警告:被忽略的行的存在可能会导致涉及行号的歧义; 参数标题使用行号(忽略注释/空行),而行首使用行号(包括注释/空行)

如果同时指定了skiprows和header,则header将相对于skiprows的末尾。 例如:

为了更好地使用日期时间数据,read_csv()使用关键字参数parse_dates和date_parser允许用户指定列的日期/时间格式,将string转换为日期时间对象。

通常,我们可能希望分别存储日期和时间数据,或分别存储各种日期字段。 parse_dates关键字可用于指定列的组合,以从中解析日期和/或时间。 您可以指定要parse_dates的列或嵌套列表,结果日期列将被添加到输出的前面(以便不影响现有的列顺序),新的列名为各列Name的连接。

默认情况下,解析器会删除组件日期列,可以选择通过keep_date_col关键字保留它们:

请注意,如果您希望将多个列合并为一个日期列,则必须使用嵌套列表。 换句话说,parse_dates = [1,2]表示第二和第三列应分别解析为单独的日期列,而parse_dates = [[1,2]]意味着应将这两列解析为单个列。

还可以使用字典来指定自定义名称列:

重要的是要记住,如果要将多个文本列解析为单个日期列,则在数据前添加一个新列。

index_col参数基于这组新列而不是原始数据列:

注意:如果列或索引包含不可解析的日期,则整个列或索引将作为对象数据类型原样返回。 对于非标准日期时间解析,请在pdread_csv之后使用to_datetime()。

注意:read_csv具有用于解析iso8601格式的日期时间字符串的fast_path,例如“ 2000-01-01T00:01:02 + 00:00”和类似的变体。 如果可以安排数据以这种格式存储日期时间,则加载时间将明显缩短,约20倍。

最后,解析器允许您指定自定义date_parser函数,以充分利用日期解析API的灵活性:

Pandas不能原生表示具有混合时区的列或索引。 如果CSV文件包含带有时区混合的列,则默认结果将是带有字符串的object-dtype列,即使包含parse_dates。

要将混合时区值解析为datetime列,请将部分应用的to_datetime()传递给utc = True作为date_parser。

本文是对pandas官方网站上《10 Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook 。习惯上,我们会按下面格式引入所需要的包:

一、 创建对象

可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。

1、可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:

2、通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:

3、通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:

4、查看不同列的数据类型:

5、如果你使用的是IPython,使用Tab自动补全功能会自动识别所有的属性以及自定义的列,下图中是所有能够被自动识别的属性的一个子集:

二、 查看数据

详情请参阅:Basics Section

1、 查看frame中头部和尾部的行:

2、 显示索引、列和底层的numpy数据:

3、 describe()函数对于数据的快速统计汇总:

4、 对数据的转置:

5、 按轴进行排序

6、 按值进行排序

三、 选择

虽然标准的Python/Numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问方式: at, iat, loc, iloc 和 ix详情请参阅Indexing and Selecing Data 和 MultiIndex / Advanced Indexing。

l 获取

1、 选择一个单独的列,这将会返回一个Series,等同于dfA:

2、 通过[]进行选择,这将会对行进行切片

l 通过标签选择

1、 使用标签来获取一个交叉的区域

2、 通过标签来在多个轴上进行选择

3、 标签切片

4、 对于返回的对象进行维度缩减

5、 获取一个标量

6、 快速访问一个标量(与上一个方法等价)

l 通过位置选择

1、 通过传递数值进行位置选择(选择的是行)

2、 通过数值进行切片,与numpy/python中的情况类似

3、 通过指定一个位置的列表,与numpy/python中的情况类似

4、 对行进行切片

5、 对列进行切片

6、 获取特定的值

l 布尔索引

1、 使用一个单独列的值来选择数据:

2、 使用where *** 作来选择数据:

3、 使用isin()方法来过滤:

l 设置

1、 设置一个新的列:

2、 通过标签设置新的值:

3、 通过位置设置新的值:

4、 通过一个numpy数组设置一组新值:

上述 *** 作结果如下:

5、 通过where *** 作来设置新的值:

四、 缺失值处理

在pandas中,使用npnan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section。

1、 reindex()方法可以对指定轴上的索引进行改变/增加/删除 *** 作,这将返回原始数据的一个拷贝:、

2、 去掉包含缺失值的行:

3、 对缺失值进行填充:

4、 对数据进行布尔填充:

五、 相关 *** 作

详情请参与 Basic Section On Binary Ops

统计(相关 *** 作通常情况下不包括缺失值)

1、 执行描述性统计:

2、 在其他轴上进行相同的 *** 作:

3、 对于拥有不同维度,需要对齐的对象进行 *** 作。Pandas会自动的沿着指定的维度进行广播:

Apply

1、 对数据应用函数:

直方图

具体请参照:Histogramming and Discretization

字符串方法

Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素,如下段代码所示。更多详情请参考:Vectorized String Methods

六、 合并

Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并 *** 作。具体请参阅:Merging section

Concat

Join 类似于SQL类型的合并,具体请参阅:Database style joining

Append 将一行连接到一个DataFrame上,具体请参阅Appending:

七、 分组

对于”group by” *** 作,我们通常是指以下一个或多个 *** 作步骤:

(Splitting)按照一些规则将数据分为不同的组;

(Applying)对于每组数据分别执行一个函数;

(Combining)将结果组合到一个数据结构中;

详情请参阅:Grouping section

1、 分组并对每个分组执行sum函数:

2、 通过多个列进行分组形成一个层次索引,然后执行函数:

八、 Reshaping

详情请参阅 Hierarchical Indexing 和 Reshaping。

Stack

数据透视表,详情请参阅:Pivot Tables

可以从这个数据中轻松的生成数据透视表:

九、 时间序列

Pandas在对频率转换进行重新采样时拥有简单、强大且高效的功能(如将按秒采样的数据转换为按5分钟为单位进行采样的数据)。这种 *** 作在金融领域非常常见。具体参考:Time Series section。

1、 时区表示:

2、 时区转换:

3、 时间跨度转换:

4、 时期和时间戳之间的转换使得可以使用一些方便的算术函数。

十、 Categorical

从015版本开始,pandas可以在DataFrame中支持Categorical类型的数据,详细 介绍参看:categorical introduction和API documentation。

1、 将原始的grade转换为Categorical数据类型:

2、 将Categorical类型数据重命名为更有意义的名称:

3、 对类别进行重新排序,增加缺失的类别:

4、 排序是按照Categorical的顺序进行的而不是按照字典顺序进行:

5、 对Categorical列进行排序时存在空的类别:

十一、 画图

具体文档参看:Plotting docs

对于DataFrame来说,plot是一种将所有列及其标签进行绘制的简便方法:

十二、 导入和保存数据

CSV,参考:Writing to a csv file

1、 写入csv文件:

2、 从csv文件中读取:

HDF5,参考:HDFStores

1、 写入HDF5存储:

2、 从HDF5存储中读取:

Excel,参考:MS Excel

1、 写入excel文件:

2、 从excel文件中读取:

来自为知笔记(Wiz)

以上就是关于Python其实很简单 第十九章 Pandas之Series与DataFrame全部的内容,包括:Python其实很简单 第十九章 Pandas之Series与DataFrame、如何将pandas.dataframe的数据写入到文件中、python数据分析模块:numpy、pandas全解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9709767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存