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; }123456
注意: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 year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 200212345678910111213
主动指定列排序方式:
pd.DataFrame(data, columns=['year', 'state', 'pop']) year state pop0 2000 Ohio 1.51 2001 Ohio 1.72 2002 Ohio 3.63 2001 Nevada 2.44 2002 Nevada 2.91234567
此处 0-1位自动生成的列索引,当然了也可以主动指定。
pd.DataFrame(data, columns=['year', 'state', 'pop'], index=['one', 'two', 'three', 'four', 'five']) year state popone 2000 Ohio 1.5two 2001 Ohio 1.7three 2002 Ohio 3.6four 2001 Nevada 2.4five 2002 Nevada 2.91234567
需要注意的是:将列表或数组赋值给某个列时,其长度必须跟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)12
2:传入一个由嵌套的字典;
它就会被解释为:外层字典的键作为列,内层键则作为行索引。
>>> dict = {... "key1": {... "subkey1": 1,... "subkey2": 2,... "subkey3": 3,... },... "key2": {... "subkey1": 4,... "subkey2": 5,... "subkey3": 6,... },... "key3": {... "subkey1": 7,... "subkey2": 8,... "subkey3": 9,... },... }1234567891011121314151617
>>> pd.DataFrame(dict) key1 key2 key3 subkey1 1 4 7subkey2 2 5 8subkey3 3 6 912345
请务必保证嵌套字典的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.0subkey1111111111111111 1.0 NaN NaNsubkey2 2.0 5.0 8.0subkey3 3.0 6.0 9.01234567891011121314151617181920212223
3:传入一个二维nd.array;
>> s = [[1,2],[3,4]]>>> np.array(s) array([[1, 2], [3, 4]]) >>> pd.DataFrame(np.array(s))12345
0 1
0 1 2
1 3 4
当然了你也可以主动指定行和列索引(不赘述): >>> pd.DataFrame(np.array(s),index=['one', 'two'], columns=['year', 'state']) year stateone 1 2two 3 4123456
4:Python中将列表转换成为数据框有两种情况:第一种是两个不同列表转换成一个数据框,第二种是一个包含不同子列表的列表转换成为数据框。
第一种:两个不同列表转换成为数据框
from pandas.core.frame import DataFrame a=[1,2,3,4]#列表ab=[5,6,7,8]#列表bc={"a" : a, "b" : b}#将列表a,b转换成字典data=DataFrame(c)#将字典转换成为数据框print(data)1234567
输出的结果为
a b0 1 51 2 62 3 73 4 812345
第二种:将包含不同子列表的列表转换为数据框
from pandas.core.frame import DataFrame a=[[1,2,3,4],[5,6,7,8]]#包含两个不同的子列表[1,2,3,4]和[5,6,7,8] data=DataFrame(a)#这时候是以行为标准写入的print(data)1234
输出结果:
0 1 2 3 0 1 2 3 4 1 5 6 7 8123
data=data.T#转置之后得到想要的结果data.rename(columns={0:'a',1:'b'},inplace=True)#注意这里0和1都不是字符串print(data) a b0 1 51 2 62 3 73 4 8123456789
5:传入其他的数据(初始化方式基本类似);
参考资料:《利用Python进行数据分析》