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.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}In [47]: df = pd.DataFrame(d)In [48]: dfOut[48]: one twoa 1.0 1.0b 2.0 2.0c 3.0 3.0d NaN 4.0In [49]: pd.DataFrame(d, index=['d', 'b', 'a'])Out[49]: one twod NaN 4.0b 2.0 2.0a 1.0 1.0In [50]: pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])Out[50]: two threed 4.0 NaNb 2.0 NaNa 1.0 NaN
行标和列标都可以通过index和columns属性获得。
In [51]: df.indexOut[51]: Index([u'a', u'b', u'c', u'd'], dtype='object')In [52]: df.columnsOut[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 two0 1 41 2 32 3 23 4 1In [6]: pd.DataFrame(d, index=['a', 'b', 'c', 'd'])Out[6]: one twoa 1 4b 2 3c 3 2d 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 C0 1 2.0 Hello1 2 3.0 WorldIn [10]: pd.DataFrame(data, index=['first', 'second'])Out[10]: A B Cfirst 1 2.0 Hellosecond 2 3.0 WorldIn [11]: pd.DataFrame(data, columns=['C', 'A', 'B'])Out[11]: C A B0 Hello 1 2.01 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 c0 1 2 NaN1 5 10 20.0In [14]: pd.DataFrame(data2, index=['first', 'second'])Out[14]: a b cfirst 1 2 NaNsecond 5 10 20.0In [15]: pd.DataFrame(data2, columns=['a', 'b'])Out[15]: a b0 1 21 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]: sOut[17]:a 1b 2c 3dtype: int64In [18]: pd.DataFrame(s, columns=['one'])Out[18]: onea 1b 2c 3
其他DataFrame初始化和操作请参考