ReadFixedWidth方法返回一个DataFrame对象。DataFrame是pandas提供的基础数据结构。pandas是一个Python数据和统计包,它的使用会贯穿本书。在DataFrame中,每个记录为一行(在我们的例子中就是每个妊娠数据为一行),每个变量为一列。

除了数据,DataFrame还包含变量名和变量类型信息,并提供访问和修改数据的方法。

如果打印df对象,你会看到其中行列的部分数据和DataFrame的大小:13 593行/记录,244列/变量。

>>> import nsfg
>>> df = nsfg.ReadFemPreg()
>>> df
...
[13593 rows x 244 columns]

dfcolumns属性将列名返回为一列Unicode字符串。

>>> df.columns
Index([u'caseid', u'pregordr', u'howpreg_n', u'howpreg_p', ... ])

df.columns的结果是一个Index对象,Index也是一个pandas数据结构。我们稍后会详细介绍Index,现在可以暂时将其视为一个列表。

>>> df.columns[1]
'pregordr'

要访问DataFrame中的一列,你可以将列名作为键值。

>>> pregordr = df['pregordr']
>>> type(pregordr)
<class 'pandas.core.series.Series'>

其结果是一个Series对象,这又是一个pandas数据结构。Series与Python列表类似,还能提供一些附加功能。打印一个Series对象会得到索引和对应的数值。

>>> pregordr
0     1
1     2
2     1
3     2
...
13590    3
13591    4
13592    5
Name: pregordr, Length: 13593, dtype: int64

这个示例中的索引是从0到13 592的整数,但通常索引可以使用任何可排序的数据类型。这个示例中的元素也是整数,但元素可以是任何类型的。

示例中的最后一行列出了变量名、Series长度和数据类型。int64是NumPy提供的类型之一。如果在32位机器上运行这个示例,得到的数据类型可能是int32

你可以使用整数的index和slice值访问Series中的元素。

>>> pregordr[0]
1
>>> pregordr[2:5]
2    1
3    2 
4    3
Name: pregordr, dtype: int64

index操作符的结果是int64,slice的结果还是一个Series。

你也可以使用点标记法来访问DataFrame中的列。

>>> pregordr = df.pregordr

只有当列名为合法的Python标识符时(即以字母开头,不包含空格等),才能使用这种写法。

30:00