5.3.1 DataFrame介绍
DataFrame对象是Pandas最常用的数据对象。一个DataFrame是一个二维的表结构,它可以存储多种不同的数据类型,并且每一个坐标轴都有自己的标签。简单的说,DataFrame就是在pandas中组织数据的表格。
5.3.2 创建DataFrame对象
下面创建一个DataFrame对象,示例代码:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(6,4), index = np.arange(0,6), columns = list("ABCD"))
print(df)
运行结果
A B C D
0 -0.846645 1.520671 -0.381286 -1.120017
1 0.448834 0.287758 0.207721 -0.459574
2 0.140812 -1.151756 -0.629771 0.501368
3 -1.757895 -0.311795 -0.023981 -0.433921
4 -2.666680 0.162864 1.905826 0.312644
5 0.841167 -1.883985 0.473520 -0.061960
我们创建一个6*4的数据,numpy.random的randn函数用于创建服从正态分布的随机数;index参数表示行标索引,即数据行记录从0到5;colunms参数表示列标索引,即数据列属性从A到B。
此外,我们也可以用字典创建DataFrame对象,例如创建一个列名分别为A和B的数据框,索引是自动创建的整数,示例代码:
df2 = pd.DataFrame( { 'A' : np.random.randn(6), 'B' : np.random.randn(6),} )
print(df2)
运行结果
A B
0 0.086054 0.033148
1 -0.350087 -1.116980
2 1.448491 -0.216606
3 0.023093 -0.750871
4 -0.391246 1.312327
5 0.767756 -0.803959
假如字典内的数据长度不同,以最长的数据为准,比如A列有1行,B列有4行,示例代码:
df3 = pd.DataFrame( { 'A' : pd.Timestamp("20170415"), 'B' : pd.Series(1, index=list(range(4))), } )
print(df3)
运行结果
A B
0 2017-04-15 1
1 2017-04-15 1
2 2017-04-15 1
3 2017-04-15 1
5.3.3 DataFrame对象的属性
DataFrame对象创建之后,具备了描述其数据及结构特征的相关属性,主要有index,columns,values,dtypes和shape等。
info主要用来对DataFrame对象基本信息的描述,index和columns分别表示行索引和列名,示例代码:
print(df.index)
print("\n")
print(df.columns)
运行结果:
Int64Index([0, 1, 2, 3, 4, 5], dtype='int64')
Index(['A', 'B', 'C', 'D'], dtype='object')
values属性用来查看数据值,示例代码:
print(df.values)
运行结果:
[[-0.84664486 1.52067103 -0.38128625 -1.12001714]
[ 0.44883372 0.28775841 0.20772062 -0.45957372]
[ 0.1408116 -1.15175558 -0.62977112 0.50136828]
[-1.75789514 -0.3117948 -0.02398082 -0.43392136]
[-2.66668042 0.16286389 1.90582602 0.31264409]
[ 0.8411672 -1.88398537 0.47351964 -0.06196017]]
dtypes属性用来获取每行变量的数据类型,shape属性与NumPy的ndarray数组类似,可以得到DataFrame的行数和列数。示例代码:
print(df.dtypes)
print("\n")
print(df.shape)
运行结果:
A float64
B float64
C float64
D float64
dtype: object
(6, 4)
5.3.4 DataFrame对象的方法
我们可以通过DataFrame具备的方法观察数据值的相关信息,主要方法有info()、count()、head()、tail()、sort()、decribe()等。
info()方法是对DataFrame对象一个基本信息的描述,而count()方法是返回每一列变量中所有非缺失数据的个数,示例代码:
print(df.info())
print("\n")
print(df.count())
运行结果:
Int64Index: 6 entries, 0 to 5
Data columns (total 4 columns):
A 6 non-null float64
B 6 non-null float64
C 6 non-null float64
D 6 non-null float64
dtypes: float64(4)
memory usage: 240.0 bytes
None
A 6
B 6
C 6
D 6
dtype: int64
head()方法用来查看前几行数据(默认是前5行),不过也可以通过括号内的参数指定前几行,示例代码:
```python
print(df.head())
运行结果:
A B C D
0 -0.846645 1.520671 -0.381286 -1.120017
1 0.448834 0.287758 0.207721 -0.459574
2 0.140812 -1.151756 -0.629771 0.501368
3 -1.757895 -0.311795 -0.023981 -0.433921
4 -2.666680 0.162864 1.905826 0.312644
指定显示前3行数据,示例代码:
print(df.head(3))
运行结果:
A B C D
0 -0.846645 1.520671 -0.381286 -1.120017
1 0.448834 0.287758 0.207721 -0.459574
2 0.140812 -1.151756 -0.629771 0.501368
使用tail()方法则用来查看最后几行数据(默认也是5行),示例代码:
print(df.tail())
运行结果:
A B C D
1 0.448834 0.287758 0.207721 -0.459574
2 0.140812 -1.151756 -0.629771 0.501368
3 -1.757895 -0.311795 -0.023981 -0.433921
4 -2.666680 0.162864 1.905826 0.312644
5 0.841167 -1.883985 0.473520 -0.061960
describe()方法用于获取数据集的常用统计量信息,包括计数、平均数、标准差、最大值、最小值及4分位差。需要注意的是,该方法仅会返回数值型变量的信息,示例代码:
print(df.describe())
运行结果:
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean -0.640068 -0.229374 0.258671 -0.210243
std 1.370322 1.189895 0.898960 0.590199
min -2.666680 -1.883985 -0.629771 -1.120017
25% -1.530083 -0.941765 -0.291960 -0.453161
50% -0.352917 -0.074465 0.091870 -0.247941
75% 0.371828 0.256535 0.407070 0.218993
max 0.841167 1.520671 1.905826 0.501368
我们也可以通过sort()方法对数据进行排序,其中sort()括号内参数可以指定根据哪一列数据进行排序,默认是首列,以从小到大顺序方式排列。示例代码:
print(df.sort(columns='C'))
运行结果:
A B C D
2 0.140812 -1.151756 -0.629771 0.501368
0 -0.846645 1.520671 -0.381286 -1.120017
3 -1.757895 -0.311795 -0.023981 -0.433921
1 0.448834 0.287758 0.207721 -0.459574
5 0.841167 -1.883985 0.473520 -0.061960
4 -2.666680 0.162864 1.905826 0.312644
此外,DataFrame与ndarray类似,也提供了大T方法,即对表格数据进行转置操作,示例代码:
print(df.T)
运行结果:
0 1 2 3 4 5
A -0.846645 0.448834 0.140812 -1.757895 -2.666680 0.841167
B 1.520671 0.287758 -1.151756 -0.311795 0.162864 -1.883985
C -0.381286 0.207721 -0.629771 -0.023981 1.905826 0.473520
D -1.120017 -0.459574 0.501368 -0.433921 0.312644 -0.061960