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