为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
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;

}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进行数据分析》


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消