DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
DataFrame有多种不同的创建方法:
- Dict of 1D ndarrays, lists, dicts, or Series
- 2-D numpy.ndarray
- Structured or record ndarray
- A Series
- Another DataFrame
1. from dict of Series or dicts
DataFrame中的index与Series结构中的index是独立的。如果输入数据是一个嵌套的dict结构,系统首先会将内部的dict转化为Series。如果初始化时没有给列名赋值,列名将会默认为dict keys.
In [46]: d = {\'one\':pd.Series([1., 2., 3.], index=[\'a\', \'b\', \'c\']), \'two\':pd.Ser
ies([1., 2., 3., 4.], index=[\'a\', \'b\', \'c\', \'d\'])}
In [47]: df = pd.DataFrame(d)
In [48]: df
Out[48]:
one two
a 1.0 1.0
b 2.0 2.0
c 3.0 3.0
d NaN 4.0
In [49]: pd.DataFrame(d, index=[\'d\', \'b\', \'a\'])
Out[49]:
one two
d NaN 4.0
b 2.0 2.0
a 1.0 1.0
In [50]: pd.DataFrame(d, index=[\'d\', \'b\', \'a\'], columns=[\'two\', \'three\'])
Out[50]:
two three
d 4.0 NaN
b 2.0 NaN
a 1.0 NaN
行标和列标都可以通过index和columns属性获得。
In [51]: df.index
Out[51]: Index([u\'a\', u\'b\', u\'c\', u\'d\'], dtype=\'object\')
In [52]: df.columns
Out[52]: Index([u\'one\', u\'two\'], dtype=\'object\')
注:当一个column集合与dict数据同时初始化,此时column集合将取代dict数据中的key值成为DataFrame的列名。
2. from dict of ndarrays/lists
ndarrays长度必须都是一样的,如果index手动初始化,index的长度同样需要与ndarrays一样长。如果index没有手动给出,range(n-1)将默认初始化为index。
In [4]: d = {\'one\':[1, 2, 3, 4,], \'two\':[4, 3, 2, 1,]}
In [5]: pd.DataFrame(d)
Out[5]:
one two
0 1 4
1 2 3
2 3 2
3 4 1
In [6]: pd.DataFrame(d, index=[\'a\', \'b\', \'c\', \'d\'])
Out[6]:
one two
a 1 4
b 2 3
c 3 2
d 4 1
3. from structured or record array
这种情况与dict of arrays一样。
In [7]: data = np.zeros((2,), dtype=[(\'A\', \'i4\'), (\'B\', \'f4\'), (\'C\', \'a10\')])
In [8]: data[:] = [(1,2.,\'Hello\'), (2, 3., \'World\')]
In [9]: pd.DataFrame(data)
Out[9]:
A B C
0 1 2.0 Hello
1 2 3.0 World
In [10]: pd.DataFrame(data, index=[\'first\', \'second\'])
Out[10]:
A B C
first 1 2.0 Hello
second 2 3.0 World
In [11]: pd.DataFrame(data, columns=[\'C\', \'A\', \'B\'])
Out[11]:
C A B
0 Hello 1 2.0
1 World 2 3.0
4. from a list of dicts
In [12]: data2 = [{\'a\':1, \'b\':2}, {\'a\':5, \'b\':10, \'c\':20}]
In [13]: pd.DataFrame(data2)
Out[13]:
a b c
0 1 2 NaN
1 5 10 20.0
In [14]: pd.DataFrame(data2, index=[\'first\', \'second\'])
Out[14]:
a b c
first 1 2 NaN
second 5 10 20.0
In [15]: pd.DataFrame(data2, columns=[\'a\', \'b\'])
Out[15]:
a b
0 1 2
1 5 10
5. from a Series
DataFrame的index与Series的index一致,如果没有其他column名称给出,DataFrame的column值与Series的一致。
In [16]: s = pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\'])
In [17]: s
Out[17]:
a 1
b 2
c 3
dtype: int64
In [18]: pd.DataFrame(s, columns=[\'one\'])
Out[18]:
one
a 1
b 2
c 3
其他DataFrame初始化和操作请参考http://pandas.pydata.org/pandas-docs/version/0.18.1/dsintro.html