Python pandas判断DataFrame是否为空和DataFrame遍历_判断dataframe为空_liveshow021_jxb的博客-程序员宅基地

技术标签: python  数据分析  Python  

一、pandas

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

二、if条件判断DataFrame是否为空

dataframe.empty加if条件判断文件是否为空,如果返回的dataframe为空,可能导致某些逻辑错误。

data = pd.read_csv(filename, skiprows=1, header=None, error_bad_lines=False)

if data.empty:
     do empty
else:
     do not empty
data = pd.read_csv(filename, skiprows=1, header=None, error_bad_lines=False)
if not data.empty:
    do not empty
else:
    do empty

三、DataFrame取某一列

# one method
dataframe[b][dataframe[a]==1].values[0]


# two method
dataframe[dataframe[a]==1][b].values[0]

三、DataFrame按行按列遍历的方式

DataFrame是一种矩阵形式,所有的行名保存在index里,列名保存在columns里。如下方式可以创建一个DataFrame:

import pandas as pd
import numpy as np

# 行数*列数要与数据个数一致
>>> df = pd.DataFrame(np.arange(12).reshape(3, 4), index = ['row1', 'row2', 'row3'], columns=['col1', 'col2','col3'])
Traceback (most recent call last):
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/internals.py", line 4857, in create_block_manager_from_blocks
    placement=slice(0, len(axes[0])))]
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/internals.py", line 3205, in make_block
    return klass(values, ndim=ndim, placement=placement)
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/internals.py", line 125, in __init__
    '{mgr}'.format(val=len(self.values), mgr=len(self.mgr_locs)))
ValueError: Wrong number of items passed 4, placement implies 3

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 379, in __init__
    copy=copy)
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 536, in _init_ndarray
    return create_block_manager_from_blocks([values], [columns, index])
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/internals.py", line 4866, in create_block_manager_from_blocks
    construction_error(tot_items, blocks[0].shape[1:], axes, e)
  File "/root/miniconda3/lib/python3.6/site-packages/pandas/core/internals.py", line 4843, in construction_error
    passed, implied))
ValueError: Shape of passed values is (4, 3), indices imply (3, 3)

>>> df = pd.DataFrame(np.arange(12).reshape(3, 4), index = ['row1', 'row2', 'row3'], columns=['col1', 'col2', 'col3', 'col4'])
>>> 
>>> df
      col1  col2  col3  col4
row1     0     1     2     3
row2     4     5     6     7
row3     8     9    10    11

>>> df.index
Index(['row1', 'row2', 'row3'], dtype='object')
>>> 
>>> df.columns
Index(['col1', 'col2', 'col3', 'col4'], dtype='object')

在这里插入图片描述

iteritems(): 按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问

iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问

itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率要高

>>> import pandas as pd
>>> 
>>> pdd = [{'c1':10, 'c2':100}, {'c1':11, 'c2':111}, {'c1':22, 'c2':222}]
>>> 
>>> print(type(pdd))
<class 'list'>
>>> 
>>> df = pd.DataFrame(pdd)
>>> 
>>> print(df)
   c1   c2
0  10  100
1  11  111
2  22  222
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

按列遍历iteritems()用法:

# index--列名
>>> for index, row in df.iteritems():
...     print(index)
... 
c1
c2

# row--某一列, row[0]某一列的第一行
>>> for index, row in df.iteritems():
...     print(row[0], row[1], row[2])
... 
10 11 22
100 111 222

按行遍历iterrows()用法:

# index-行号
>>> for index, row in df.iterrows():
...     print(index)
... 
0
1
2

# 某一行通过列名name访问对应的元素
>>> for index, row in df.iterrows():
...     print(row['c1'], row['c2'])
... 
10 100
11 111
22 222

按行遍历itertuples()用法:

# getattr(row, 'name')得到某行的元素
>>> for row in df.itertuples():
...     print(getattr(row, 'c1'), getattr(row, 'c2'))
... 
10 100
11 111
22 222

引用

【1】https://pandas.pydata.org/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liveshow021_jxb/article/details/113062275

智能推荐

undrop for innodb c_parser 不完美之处-程序员宅基地

今天发现c_parser导出数据是会丢掉某些行,给过调试发现是他处理utf8编码时计算有误,目前还没有发现自动解决总是的方法,只会手动改代码来解决. 下一步计划把c_parser移植到windows下,并改正发现的问题, 做成windows程序的原因是自己对linux编程不太熟,调试更不熟,又考虑到linux和windows下许多实现都不一样,所以不计划做多平台了

OpenGL基础图形编程 - OpenGL辅助库的基本使用 _auxwiresphere-程序员宅基地

OpenGL是一个开放的系统,它是独立于任何窗口系统或操作系统的。尽管它包含了许多图形函数,但它却没有窗口函数,也没有从键盘和鼠标读取事件的函数,所以要初学者写出一个完整的图形程序是相当困难的。另外,OpenGL图形函数中只提供基本的几何原形:点、线、多边形,因此要创建基本的三维几何体如球、锥体等,也很不容易。而OpenGL辅助库就是为解决这些基本问题专门设计的,它提供了一些基本的窗口管理函数和三_auxwiresphere

我们在调用EventLoop.execute()方法时究竟做了一些什么工作-程序员宅基地

我们在研究注册过程中的源码可以看到这样的一段代码 eventLoop.execute(new Runnable() { @Override public void run() { register0(promi...

Android LED数字/电子表字体digital font_像电子表的字体叫什么-程序员宅基地

Android LED数字/电子表字体digital font先看实现的字体样式:这种类型的字体样式会被一些UI设计用于Android APP中视频,或者广告的倒计时牌,比如常见的Android视频直播软件中右上角的广告倒计时。实现这种字体样式,先导入一个字体包:digital-7.ttf。这个digital-7.ttf文件,我已经上传,下载链接地址:http://download.csdn.ne_像电子表的字体叫什么

习题6-8 统计一行文本的单词个数 (15分)-程序员宅基地

习题6-8 统计一行文本的单词个数 (15分)本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。输入格式:输入给出一行字符。输出格式:在一行中输出单词个数。输入样例:Let’s go to room 209.输出样例:5AC代码:#include<stdio.h> int main(){ ...

数据库学习笔记——使用游标_数据库游标的使用-程序员宅基地

游标是被select语句检索出来的结果集,能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。使用游标1、声明游标2、打开游标以供使用3、根据需要取出检索出的各条记录4、关闭游标创建游标打开关闭游标使用游标数据定义游标变量:declare 游标变量名 cursor for select查询语句读取游标..._数据库游标的使用

随便推点

新手分享:MDK5.13新建工程步骤-程序员宅基地

原文 : http://www.stmcu.org/module/forum/thread-600249-1-1.html本人也是接触stm32没多久,之前用的MDK是5.1,现在用的是5.13,MDK5.0之前的版本(本人简称旧版)和之后的版本(本人简称新版)新建工程有很大区别。对于刚开始用学stm32的新手来说,基本上stm32 的视频教程,都是使用的旧版MDK,如果新手直接安装的是新

SpringBoot 配置Mybatis两种方式-程序员宅基地

目前SpringBoot被各企业广泛使用,在SpringBoot结合Mybatis使用时,有的人将mapper.xml 存放到resouce的目录下,有的想把Mapper.xml 和接口放到一起,但是这样/就会存在Mapper.xml加载不了,导致方法无法找到,现在咱们看看两种方式的配置。首先说第一种:也就是网上说的最多的一种,添加依赖,我就不细说了。1.在application.pr...

java中使用正则表达式分割字符串,以及字符串中数字截取的方法_java正则表达式分割出字符串和数字-程序员宅基地

原始数据 String result = "毛重:9890kg|净重:9810kg|钢卷号:8202335702|标签号:Z3Q8141892"根据 | 分割字符串String [] temp = result .split("\\|");List<String> list = new ArrayList<String>();for(int i=0;i<..._java正则表达式分割出字符串和数字

JavaScript-X3DOM学习笔记(一)-世界坐标-程序员宅基地

快捷键r,可以重置观察者viewpoint, 鼠标左键是rotation, 中键是Pan.右键是forward/backward这是运行效果图下面是html源代码&lt;html&gt;&lt;head&gt; &lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt; &lt;meta charset="utf-..._x3dom

Redis五种基本数据类型底层详解(原理篇)_redis数据类型底层原理-程序员宅基地

Redis五种基本数据类型底层详解详细介绍Redis用到的数据结构简单动态字符串SDS和C字符串的区别总结链表字典哈希表字典哈希算法解决键冲突rehash(重点)渐进式rehash跳跃表详细介绍Redis用到的数据结构各位,稍安勿躁,讲解五种基本数据类型前,我们先来这些数据类型用到的数据结构,防止后面懵逼,本文所用源码来源:Redis源码链接,版本使用6.2简单动态字符串我们都知道Redis是用C写的,但Redis中并没有直接使用C语言传统的字符串(以空字符结尾的字符数组),而是自己构建了一种名_redis数据类型底层原理