python下的Pandas中DataFrame基本操作(二),DataFrame、dict、array构造简析

xiaoxiao2021-02-28  15

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:Python中将列表转换成为数据框有两种情况:第一种是两个不同列表转换成一个数据框,第二种是一个包含不同子列表的列表转换成为数据框。 第一种:两个不同列表转换成为数据框

from pandas.core.frame import DataFrame a=[1,2,3,4]#列表a b=[5,6,7,8]#列表b c={"a" : a, "b" : b}#将列表a,b转换成字典 data=DataFrame(c)#将字典转换成为数据框 print(data)

输出的结果为

a b 0 1 5 1 2 6 2 3 7 3 4 8

第二种:将包含不同子列表的列表转换为数据框

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)

输出结果:

0 1 2 3 0 1 2 3 4 1 5 6 7 8 data=data.T#转置之后得到想要的结果 data.rename(columns={0:'a',1:'b'},inplace=True)#注意这里0和1都不是字符串 print(data) a b 0 1 5 1 2 6 2 3 7 3 4 8

5:传入其他的数据(初始化方式基本类似);    参考资料:《利用Python进行数据分析》

在一个空的dataframe中插入数据

def test(): LIST=[1,2,3,4] empty = pd.DataFrame(columns = ["med", "id"]) for i in LIST: new= pd.DataFrame({"med":i,"id":i+1},index=["0"]) empty= empty.append(new,ignore_index=True) print(empty)
转载请注明原文地址: https://www.6miu.com/read-2150218.html

最新回复(0)