zoukankan      html  css  js  c++  java
  • DataFrame

    DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等),DataFrame就行索引也有列索引,可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比,DataFrame中面向行和面向列的操作基本上是平衡的。

    构建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或Numpy数组组成的字典。

    结果DataFrame会自动加上索引,且全部列会被有序排列。

     1 In [10]: import pandas as ps
     2 
     3 In [11]: from pandas import DataFrame
     4 
     5 In [12]: data = {'state':['simple','simple','Python','Python'],'year':['2017','2
     6     ...: 018','2019','2020'],'pop':['1','2','3','4']}
     7 
     8 In [13]: frame = DataFrame(data)
     9 
    10 In [14]: frame
    11 Out[14]: 
    12   pop   state  year
    13 0   1  simple  2017
    14 1   2  simple  2018
    15 2   3  Python  2019
    16 3   4  Python  2020

    如果指定列顺序,DataFrame的列就会按照指定顺序进行排列。

    1 In [15]: DataFrame(data,columns=['year','state','pop'])
    2 Out[15]: 
    3    year   state pop
    4 0  2017  simple   1
    5 1  2018  simple   2
    6 2  2019  Python   3
    7 3  2020  Python   4

    与Series一样,如果传入的列在数据中找不到,就会产生NA值。

     1 In [17]: frame2 = DataFrame(data,columns=['year','state','pop','debt'],index=['o
     2     ...: ne','two','three','four'])
     3 
     4 In [18]: frame2
     5 Out[18]: 
     6        year   state pop debt
     7 one    2017  simple   1  NaN
     8 two    2018  simple   2  NaN
     9 three  2019  Python   3  NaN
    10 four   2020  Python   4  NaN
    11 
    12 In [19]: frame2.columns
    13 Out[19]: Index([u'year', u'state', u'pop', u'debt'], dtype='object')

    通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series。

     1 In [20]: frame2['state']
     2 Out[20]: 
     3 one      simple
     4 two      simple
     5 three    Python
     6 four     Python
     7 Name: state, dtype: object
     8 
     9 In [21]: frame2.year
    10 Out[21]: 
    11 one      2017
    12 two      2018
    13 three    2019
    14 four     2020
    15 Name: year, dtype: object

    返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。行也可以通过位置或名称的方式进行获取,用索引字段ix

    1 In [23]: frame2.ix['three']
    2 Out[23]: 
    3 year       2019
    4 state    Python
    5 pop           3
    6 debt        NaN
    7 Name: three, dtype: object

    列可以通过赋值的方式进行修改,给空的‘debt’列附上一个标量值或一组值。

    1 In [24]: frame2['debt'] = '10'
    2 
    3 In [25]: frame2
    4 Out[25]: 
    5        year   state pop debt
    6 one    2017  simple   1   10
    7 two    2018  simple   2   10
    8 three  2019  Python   3   10
    9 four   2020  Python   4   10

    通过np.arange()为‘debt’列赋值

    1 In [29]: frame2['debt'] = np.arange(4.)
    2 
    3 In [30]: frame2
    4 Out[30]: 
    5        year   state pop  debt
    6 one    2017  simple   1   0.0
    7 two    2018  simple   2   1.0
    8 three  2019  Python   3   2.0
    9 four   2020  Python   4   3.0

    将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配,如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都会被填上缺失值。

     1 1 In [32]:  val = Series([1,3,4],index=['one','three','four'])
     2  2 
     3  3 In [33]: frame2['debt'] = val
     4  4 
     5  5 In [34]: frame2
     6  6 Out[34]: 
     7  7        year   state pop  debt
     8  8 one    2017  simple   1   1.0
     9  9 two    2018  simple   2   NaN
    10 10 three  2019  Python   3   3.0
    11 11 four   2020  Python   4   4.0

    为不存在的列赋值会创建出一个新列,关键字del用于删除列。。

     1 In [35]: frame2['eastern'] = frame2.state=='simple'
     2 
     3 In [36]: frame2
     4 Out[36]: 
     5        year   state pop  debt  eastern
     6 one    2017  simple   1   1.0     True
     7 two    2018  simple   2   NaN     True
     8 three  2019  Python   3   3.0    False
     9 four   2020  Python   4   4.0    False
    10 
    11 In [37]: del frame2['eastern']
    12 
    13 In [38]: frame2.columns
    14 Out[38]: Index([u'year', u'state', u'pop', u'debt'], dtype='object')

    通过索引方式返回的列知识相应数据的视图,并不是副本。因此,对返回的Series所做的任何就地修改全都会反应到源DataFrame上。通过Series的copy()即可显示地复制列

  • 相关阅读:
    TP ajax
    TP分页
    TP表单验证
    TP数据删除
    TP数据查询
    TP【连接数据库配置及Model数据模型层】
    TP系统常量信息
    ThinkPHP中Session用法详解
    ThinkPHP部分内置函数
    element-ui select可搜索下拉框无法在IOS或Ipad调起小键盘输入法
  • 原文地址:https://www.cnblogs.com/yu-1104/p/7891446.html
Copyright © 2011-2022 走看看