1. 程式人生 > >Pandas DataFrame構造簡析

Pandas DataFrame構造簡析

基本類 1.0 image ... data 值類型 bsp pandas sse

參考書籍:《利用Python進行數據分析》

DataFrame簡介:

  DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。跟其他類似的數據結構相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。其實,DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。

  導入python庫:

import numpy as np
import pandas as pd

DataFrame構造:

  1:直接傳入一個由等長列表或NumPy數組組成的字典;

dict = {
    "key1": value1;
    "key2": value2;
    "key3": value3;

}

  註意:key 會被解析為列數據,value 會被解析為行數據。

>>> data = {
...     state: [Ohio, Ohio, Ohio, Nevada, Nevada],
...     year: [2000, 2001, 2002, 2001, 2002],
...     pop: [1.5, 1.7, 3.6, 2.4, 2.9]
... }

>>> pd.DataFrame(data) pop state year 0 1.5 Ohio 2000 1 1.7 Ohio 2001 2 3.6 Ohio 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002

   主動指定列排序方式:

>>> pd.DataFrame(data, columns=[year, state, pop])
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9

  此處 0-1位自動生成的列索引,當然了也可以主動指定。

>>> pd.DataFrame(data, columns=[year, state, pop], index=[one, two, three, four, five])
       year   state  pop
one    2000    Ohio  1.5
two    2001    Ohio  1.7
three  2002    Ohio  3.6
four   2001  Nevada  2.4
five   2002  Nevada  2.9

  需要註意的是:將列表或數組賦值給某個列時,其長度必須跟DataFrame的長度相匹配!!否則會報ValueError。

>>> pd.DataFrame(data, columns=[year, state, pop], index=[one, two, three, four]) 
ValueError: Shape of passed values
is (3, 5), indices imply (3, 4)

  2:傳入一個由嵌套的字典;

  它就會被解釋為:外層字典的鍵作為列,內層鍵則作為行索引。

>>> dict = {
...     "key1": {
...         "subkey1": 1,
...         "subkey2": 2,
...         "subkey3": 3,
...     },
...     "key2": {
...         "subkey1": 4,
...         "subkey2": 5,
...         "subkey3": 6,
...     },
...     "key3": {
...         "subkey1": 7,
...         "subkey2": 8,
...         "subkey3": 9,
...     },
... }
>>> pd.DataFrame(dict)
         key1  key2  key3
subkey1     1     4     7
subkey2     2     5     8
subkey3     3     6     9

  請務必保證嵌套字典的key的一致性,不然的話,數據會異常,但不會顯式的報錯,而是顯示出NaN,

>>> dict = {
...     "key1": {
...         "subkey1111111111111111": 1,
...         "subkey2": 2,
...         "subkey3": 3,
...     },
...     "key2": {
...         "subkey1": 4,
...         "subkey2": 5,
...         "subkey3": 6,
...     },
...     "key3": {
...         "subkey1": 7,
...         "subkey2": 8,
...         "subkey3": 9,
...     },
... }
>>> pd.DataFrame(dict)
                        key1  key2  key3
subkey1                  NaN   4.0   7.0
subkey1111111111111111   1.0   NaN   NaN
subkey2                  2.0   5.0   8.0
subkey3                  3.0   6.0   9.0

  3:傳入一個二維nd.array;

>>> s = [[1,2],[3,4]]
>>> np.array(s)
array([[1, 2], 
    [3, 4]])
>>> pd.DataFrame(np.array(s))
   0  1
0  1  2
1  3  4

  當然了你也可以主動指定行和列索引(不贅述):

>>> pd.DataFrame(np.array(s),index=[one, two], columns=[year, state])
     year  state
one     1      2
two     3      4

  4:傳入其他的數據(初始化方式基本類似);

技術分享圖片

  

Pandas DataFrame構造簡析