警告和疑难意味着一个看不见的问题。在使用Pandas过程中,需要特别注意的地方。

与Pandas一起使用If/Truth语句

当尝试将某些东西转换成布尔值时,Pandas遵循了一个错误的惯例。 这种情况发生在使用布尔运算的。 目前还不清楚结果是什么。 如果它是真的,因为它不是zerolength? 错误,因为有错误的值? 目前还不清楚,Pandas提出了一个ValueError -

import pandas as pd

if pd.Series([False, True, False]):
print ('I am True')

输出结果:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
 

if条件,它不清楚如何处理它。错误提示是否使用None或任何这些。

import pandas as pd

if pd.Series([False, True, False]).any():
print("I am any")

要在布尔上下文中评估单元素Pandas对象,请使用方法.bool() -

import pandas as pd

print (pd.Series([True]).bool())

输出结果:

True
 

按位布尔值

按位布尔运算符(如==!=)将返回一个布尔系列,这几乎总是需要的。

import pandas as pd

s = pd.Series(range(5))
print (s==4)

输出结果:

0    False
1 False
2 False
3 False
4 True
dtype: bool
 

isin操作符

这将返回一个布尔序列,显示系列中的每个元素是否完全包含在传递的值序列中。

import pandas as pd

s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print (s)

输出结果:

0     True
1 False
2 True
dtype: bool
 

重构索引与ix陷阱

许多用户会发现自己使用ix索引功能作为从Pandas对象中选择数据的简洁方法 -

import pandas as pd
import numpy as np df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three','four'],index=list('abcdef')) print (df)
print ("=============================================")
print (df.ix[['b', 'c', 'e']])

输出结果:

        one       two     three      four
a -1.174632 0.951047 -0.177007 1.036567
b -0.806324 -0.562209 1.081449 -1.047623
c 0.107607 0.778843 -0.063531 -1.073552
d -0.277602 -0.962720 1.381249 0.868656
e 0.576266 0.986949 0.433569 0.539558
f -0.708917 -0.583124 -0.686753 -2.338110
=============================================
one two three four
b -0.806324 -0.562209 1.081449 -1.047623
c 0.107607 0.778843 -0.063531 -1.073552
e 0.576266 0.986949 0.433569 0.539558
 

这当然在这种情况下完全等同于使用reindex方法 -

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three','four'],index=list('abcdef')) print (df)
print("=============================================")
print (df.reindex(['b', 'c', 'e']))

输出结果:

        one       two     three      four
a -1.754084 -1.423820 -0.152234 -1.475104
b 1.508714 -0.216916 -0.184434 -2.117229
c -0.409298 -0.224142 0.308175 -0.681308
d 0.938517 -1.626353 -0.180770 -0.470252
e 0.718043 -0.730215 -0.716810 0.546039
f 2.313001 0.371286 0.359952 2.126530
=============================================
one two three four
b 1.508714 -0.216916 -0.184434 -2.117229
c -0.409298 -0.224142 0.308175 -0.681308
e 0.718043 -0.730215 -0.716810 0.546039
 

有人可能会得出这样的结论,ixreindex是基于这个100%的等价物。 除了整数索引的情况,它是true。例如,上述操作可选地表示为 -

import pandas as pd
import numpy as np df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three', 'four'],index=list('abcdef')) print (df)
print("=====================================")
print (df.ix[[1, 2, 4]])
print("=====================================")
print (df.reindex([1, 2, 4]))

输出结果:

        one       two     three      four
a 1.017408 0.594357 -0.760587 1.001547
b -1.480067 1.524270 0.455070 1.886959
c -0.136238 -0.165867 -0.589767 -1.078473
d 0.670576 1.600312 0.219578 -1.121352
e -0.224181 0.958156 0.013055 -0.013652
f 1.576155 -0.185003 -0.527204 -0.336275
=====================================
one two three four
b -1.480067 1.524270 0.455070 1.886959
c -0.136238 -0.165867 -0.589767 -1.078473
e -0.224181 0.958156 0.013055 -0.013652
=====================================
one two three four
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
4 NaN NaN NaN NaN
 

重要的是要记住,reindex只是严格的标签索引。这可能会导致一些潜在的令人惊讶的结果,例如索引包含整数和字符串的病态情况。

最新文章

  1. Lua 排行榜更新
  2. vim正则表达式~转
  3. Linux——makefile
  4. HTML页面上获取鼠标的位置(备忘)
  5. Oracle11g密码区分大小写导致database link无法连接
  6. Devexpress 使用经验 —— ASPxGridView前后台交互写法推荐
  7. 根据浏览器判断是下载IOS还是其它的手机安装包
  8. 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER
  9. vue 安装之路
  10. 028 IDEA中下载与上传程序
  11. Oracle EBS INV创建保留
  12. c# 后台异步请求接口
  13. 为什么java代码中要避免多层深度for循环嵌套
  14. Java开发工程师学习路线
  15. Opera Unite 用户指南
  16. 使用_beginThreadex创建多线程(C语言版多线程)
  17. Sqlite数据多表联合update
  18. 手把手教你如何玩转Activiti工作流
  19. npm命令,查看当前npm版本,更新nmp到最新版本,安装sails
  20. 三 Buffer

热门文章

  1. 手写bind函数
  2. Redis 内存管理 源码分析
  3. Appium+python自动化(五)- 模拟器(超详解)
  4. day06——小数据池、深浅拷贝、集合
  5. Scala中sortBy和Spark中sortBy区别
  6. 微信小程序练习笔记(更新中。。。)
  7. 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?【华为云技术分享】
  8. 【java】java反射获取属性和属性值,java反射设置属性和属性值
  9. 11、VUE混合
  10. 兼容 .NET Core3.0, Natasha 框架实现 隔离域与热编译操作