专栏首页深度学习之tensorflow实战篇python下的Pandas中DataFrame基本操作(二),DataFrame、dict、array构造简析

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

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于R语言利用QQ群进行数据挖掘案例整理

           利用QQ群进行数据挖掘案例,数据源来源于2016年12-2017年大致一个月的QQ群基本数据,通过对聊天内容的分析,了解QQ聊天群资料了解时间,人...

    学到老
  • python3 django整理(七) Django 从后台往前台传递数据时有多种方法可以实现。

    Django 从后台往前台传递数据时有多种方法可以实现。 基础形式: from django.shortcuts import render def main...

    学到老
  • dataframe进行常用统计、分组统计平均绝对偏差等操作函数。

    pandas在dataframe中提供了丰富的统计、合并、分组、缺失值等操作函数。 1.统计函数 df.count() #非空元素计算 df.min() #...

    学到老
  • Golang后端渲染整合vue单页面冲突解决

    go后端模版渲染是通过 {{}} ,但是有个恶心的问题,vue也是通过双花括号来渲染的,如果同时使用,go渲染的时候就会报错,因为分别不出来哪个是vue的,哪个...

    码农笔录
  • 【IoT应用创新大赛】基于TencentOS的智能环境监测系统

    物联网( IoT ,Internet of things )即“万物相连的互联网”,是互联网基础上的延伸和扩展的网络,将各种信息传感设备与互联网结合起来而形成的...

    yyyyyyw
  • 自动更新程序源码下载(C#.Net)

    由于微软提供的更新程序使用不方便,所以又写了此程序。此程序是本人一年前所写的一段程序,当时在开发一个CS版本报价系统,当时由于开发过程仓促,代码可能有点不是太规...

    乔达摩@嘿
  • 照虎画猫写自己的Spring

    从细节跳出来 看了部分Spring的代码,前面用了四篇内容写了一些读书笔记。 回想起来,论复杂度,Spring够喝上好几壶的。他就像一颗枝繁叶茂的大树,远处看...

    JackieZheng
  • Storm的数据处理编程单元:Bolt 学习整理

      Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元。Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现...

    用户3003813
  • C# 实现客户端程序自动更新

    文章来源 博客园 jenry(云飞扬)http://www.cnblogs.com/jenry/archive/2006/08/15/477302.html

    乔达摩@嘿
  • 照虎画猫写自己的Spring

    从细节跳出来 看了部分Spring的代码,前面用了四篇内容写了一些读书笔记。 回想起来,论复杂度,Spring够喝上好几壶的。他就像一颗枝繁叶茂的大树,远处看...

    JackieZheng

扫码关注云+社区

领取腾讯云代金券