参考书籍:《利用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:传入其他的数据(初始化方式基本类似);