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

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

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

 In [10]: import pandas as ps

 In [11]: from pandas import DataFrame

 In [12]: data = {'state':['simple','simple','Python','Python'],'year':['','
...: 018','2019','2020'],'pop':['1','2','3','4']} In [13]: frame = DataFrame(data) In [14]: frame
Out[14]:
pop state year
0 1 simple 2017
1 2 simple 2018
2 3 Python 2019
3 4 Python 2020

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

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

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

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

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

 In [20]: frame2['state']
Out[20]:
one simple
two simple
three Python
four Python
Name: state, dtype: object In [21]: frame2.year
Out[21]:
one 2017
two 2018
three 2019
four 2020
Name: year, dtype: object

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

 In [23]: frame2.ix['three']
Out[23]:
year 2019
state Python
pop 3
debt NaN
Name: three, dtype: object

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

 In [24]: frame2['debt'] = ''

 In [25]: frame2
Out[25]:
year state pop debt
one 2017 simple 1 10
two 2018 simple 2 10
three 2019 Python 3 10
four 2020 Python 4 10

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

 In [29]: frame2['debt'] = np.arange(4.)

 In [30]: frame2
Out[30]:
year state pop debt
one 2017 simple 1 0.0
two 2018 simple 2 1.0
three 2019 Python 3 2.0
four 2020 Python 4 3.0

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

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

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

 In [35]: frame2['eastern'] = frame2.state=='simple'

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

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

DataFrame的更多相关文章

  1. Spark的DataFrame的窗口函数使用

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 SparkSQL这块儿从1.4开始支持了很多的窗口分析函数,像row_number这些,平时写程 ...

  2. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  3. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  4. pandas.DataFrame对行和列求和及添加新行和列

    导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...

  5. pandas.DataFrame排除特定行

    使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...

  6. Spark SQL 之 DataFrame

    Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...

  7. spark dataframe 类型转换

    读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.s ...

  8. 数据分析(9):DataFrame介绍

    DataFrame 表格型的数据结构 创建DataFrame 可以通过传入dict的方式,DataFrame会自动加上索引,并且列会有序排列 data = {'state':['a', 'b', 'c ...

  9. DataFrame格式化

    1.如果是格式化成Json的話直接 val rdd = df.toJSON.rdd 2.如果要指定格式需要自定义函数如下: //格式化具体字段条目 def formatItem(p:(StructFi ...

  10. RDD/Dataset/DataFrame互转

    1.RDD -> Dataset val ds = rdd.toDS() 2.RDD -> DataFrame val df = spark.read.json(rdd) 3.Datase ...

随机推荐

  1. Binder和SurfaceFlinger以及SystemServer介绍-android学习之旅(79)

    由于binder机制的存在,使得进程A可以访问进程B中的对象. Android系统Binder机制中的四个组件Client.Server.Service Manager和Binder驱动程序: 1. ...

  2. Makefile学习(三)[第二版]

    make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...

  3. cocos2D v3.x中动作回调函数的变化

    cocos2D v3.x版本中的动作的回调函数不能再带任何参数并且不能返回任何值. 官方给出的传递参数的办法是: 选择器(selector)不能带有任何形参,选择器需要的参数必须通过ivar或prop ...

  4. LeetCode(67)-Rotate Array

    题目: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the ar ...

  5. LeetCode(65)-Power of Four

    题目: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example ...

  6. LeetCode(39)-Intersection of Two Linked Lists

    听歌曲初爱有感: 开头啰嗦两句,刚在做算法题目的时候,听到了杨宗纬的<初爱>,突然有了一种本科时候的感觉,想想自己现在研二了,青春喂了狗,我果断喝了一罐啤酒,循环这首歌到吐-.. 题目: ...

  7. CDH安装系统环境准备——虚拟机网络配置

    虚拟机网络配置教程如下: 1.修改网络配置文件[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0配置IP地址.网关.掩码.DNS ...

  8. PL/SQL 设置

    1.如何批量导出建表语句?    通过菜单选择[Tools]–>[Export User Objects...],在打开的窗口中选择准备导出的表即可. 通过此种方式导出的sql脚本中不会有ins ...

  9. oracle超出打开游标的最大数的原因和解决方案

    oracle超出打开游标的最大数的原因和解决方案 分类: Oracle相关2012-06-05 10:36 6362人阅读 评论(0) 收藏 举报 oracle数据库sqljavasessionsys ...

  10. 轻松解决oracle11g 空表不能exp导出的问题

    轻松解决oracle11g 空表不能exp导出的问题 [引用 2012-9-22 18:06:36]     字号:大 中 小 oracle11g的新特性,数据条数是0时不分配segment,所以就不 ...