学科分类
目录
数据分析

DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型。与Series的结构相似,DataFrame的结构也是由索引和数据组成的,不同的是,DataFrame的索引不仅有行索引,还有列索引,其结构的示意图如图1所示。

img

图1 DataFrame对象结构示意图

图1展示的是DataFrame结构表现形式,其行索引位于最左边一列,列索引位于最上面一行,并且数据可以有多列。与Series的索引相似,DataFrame的索引也是自动创建的,默认是从0~N的整数类型索引。

Pandas的DataFrame类对象可以使用以下构造方法创建:

pandas.DataFrame(data = None,index = None,columns = None,dtype = None,copy = False)

上述构造方法中常用参数所表示的含义如下:

(1) index:行标签。如果没有传入索引参数,则默认会自动创建一个从0~N的整数索引。

(2) columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0~N的整数索引。

为了能够让读者更好地理解,下面通过一个示例来演示如何创建DataFrame类对象,具体代码如下。

In [8]: import numpy as np
        import pandas as pd
        demo_arr = np.array([['a', 'b', 'c'], ['d', 'e', 'f']]) # 创建数组
df_obj = pd.DataFrame(demo_arr)  # 基于数组创建DataFrame对象
df_obj
Out[8]: 
  0 1 2
0 a b c
1 d e f

上述示例中,创建了一个2行3列的数组demo_arr,然后通过demo_arr构建了一个DataFrame对象df_obj。从输出结果可以看出,df_obj对象的行索引和列索引都是自动从0开始的。

如果在创建DataFrame类对象时,为其指定了列索引,则DataFrame的列会按照指定索引的顺序进行排列,示例代码如下。

# 创建DataFrame对象,指定列索引
In [9]: df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
df_obj
Out[9]: 
 No1 No2 No3
0  a  b   c
1  d  e   f

为了便于获取每列的数据,我们既可以使用列索引的方式进行获取,也可以通过访问属性的方式来获取列数据,返回的结果是一个Series对象,该对象拥有与原DataFrame对象相同的行索引。例如,获取列索引为“No2”的一列数据,具体代码如下。

In [10]: element = df_obj['No2'] # 通过列索引的方式获取一列数据
         element
Out[10]: 
0  b
1  e
Name: No2, dtype: object
In [11]: type(element)          # 查看返回结果的类型
Out[11]: pandas.core.series.Series

上述示例在输出列数据的同时,又输出了列索引的名称和数据类型,分别为No2和object。下面使用访问属性的方式,获取属性为No2的一列数据,具体代码如下。

In [12]: element = df_obj.No2 # 通过属性获取列数据
         element
Out[12]: 
0  b
1  e
Name: No2, dtype: object
In [13]: type(element)      # 查看返回结果的类型
Out[13]: pandas.core.series.Series

注意:

在获取DataFrame的一列数据时,推荐使用列索引的方式完成,主要是因为在实际使用中,列索引的名称中很有可能带有一些特殊字符(如空格),这时使用“点字符”进行访问就显得不太合适了。

要想为DataFrame增加一列数据,则可以通过给列索引或者列名称赋值的方式实现,类似于给字典增加键值对的操作。不过,新增列的长度必须与其它列的长度保持一致,否则会出现ValueError异常,示例代码如下。

In [14]: df_obj['No4'] = ['g', 'h']   # 增加No4一列数据
         df_obj
Out[14]: 
 No1 No2 No3 No4
0  a  b   c   g
1  d  e   f   h

要想删除某一列数据,则可以使用del语句实现,示例代码如下。

In [15]: del df_obj['No3']         # 删除No3一列数据
         df_obj
Out[15]: 
 No1 No2 No4
0  a  b   g
1  d  e   h
点击此处
隐藏目录