Python 的 pandas DataFrame 简介
Python 的 pandas DataFrame 简介
pandas
是一个开源的 Python 库,它提供了高性能的数据操控,使得数据分析变得快速和简单。典型的 pandas
用途有重塑(reshape
)、排序(sort
)、切片(slice
)、聚合(aggregate
)和合并(merge
)数据。
pandas
库的底层是 NumPy
库。NumPy
是用来处理数组的,它的性能比传统的 Python 列表,高得多,因为它把数据存放在一块连续的内存里。
pandas
处理三种关键的数据结构:
-
Series(系列)
:这是一个类似于一维数组的对象,包含一个数据数组和一个数据标签数组。数据标签数组被称作index
,如果用户没有明确指明index
,index
会被自动指明使用从0
到n - 1
范围里的整数; -
DataFrame(数据帧)
:用来表示数据表格,比如包含列列表电子表格。数据帧对象有助于在行和列中存储和操作表格数据。数据帧对象对行和列都有索引; -
Panel(面板)
: 这是一个数据三维容器。
在数据分析中,数据帧是一个关键数据结构。接下来我们简单地介络一个数据帧对象的基本操作。
数据帧的操作
创建数据帧有好几种方法,比如可以从字典中、从 CSV 文件中,从 Excel 表格中,或从 NumPy 数组中创建。最简单的方法,是从字典中创建。在下面的代码中,我们从字典中创建了一个数据帧:
import pandas as pd
weekly_data = {
'day': ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
'温度':[40, 33, 42, 31, 41, 40, 30],
'天气': ["晴天", "多云", "晴天", "下雨", "晴天", "多云", "下雨"]}
df = pd.DataFrame(weekly_data)
print(df)
上面的代码会产生下面的输出:
day 温度 天气
0 星期一 40 晴天
1 星期二 33 多云
2 星期三 42 晴天
3 星期四 31 下雨
4 星期五 41 晴天
5 星期六 40 多云
6 星期日 30 下雨
pandas
库在方法和属性方面非常非富。DataFrame
对象的常用属性和方法如下:
index
:这个属性提供数据帧对象的索引(或标签)列表;columns
:这个属性提供数据帧对象中的列列表;size
:这个属性是数据帧的大小,是列数和行数的乘积;shape
:提供一个元组对象,表示数据帧的维度;axes
:返回一个表示数据帧对象轴的列表,包括行和列;describe
:这个强大的方法生成统计数据,如计数、平均值、标准差以及最小值和最大值;head
:类似于head
命令,这个方法返回数据帧对象的前 n (默认是 5)行;tail
:这个方法类似于tail
命令,这个方法返回数据帧对像的最后 n (默认是 5)行;drop_duplicates
:在数据帧的所有列中,删除重复的行;dropna
:此方法从数据帧中删除缺失的值(如行或列)。通过向此方法传递适当的参数,我们可以删除行或列。
此外,我们可以设置是根据丢失值的一次出现删除行还是仅在行或列中的所有值都丢失时删除行或列。sort_values
:这个方法,可以基于一列或多列对行排序。
接下来,我们讲解几个基础操作。
设置一个自定义索引
列标签(索引)通常根据字典提供的数据添加,或根据使用的任何其他输入数据流添加。有两种方法更改数据帧的索引,
下面一一讲解:
- 把其中一个数据列作为索引,看下面的代码:
import pandas as pd
weekly_data = {
'day': ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
'温度':[40, 33, 42, 31, 41, 40, 30],
'天气': ["晴天", "多云", "晴天", "下雨", "晴天", "多云", "下雨"]}
df = pd.DataFrame(weekly_data)
df_new = df.set_index('day')
print(df)
print(df_new)
上面的代码输出结果如下:
day 温度 天气
0 星期一 40 晴天
1 星期二 33 多云
2 星期三 42 晴天
3 星期四 31 下雨
4 星期五 41 晴天
5 星期六 40 多云
6 星期日 30 下雨
温度 天气
day
星期一 40 晴天
星期二 33 多云
星期三 42 晴天
星期四 31 下雨
星期五 41 晴天
星期六 40 多云
星期日 30 下雨
- 通过指定一个列表,手动指明索引:
import pandas as pd
weekly_data = {
'day': ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
'温度':