Caveats & Gotchas

优质
小牛编辑
134浏览
2023-12-01

警告意味着警告和陷阱意味着一个看不见的问题。

在Pandas中使用If/Truth语句

当您尝试将某些内容转换为bool时,Pandas会遵循提出错误的numpy惯例。 这种情况发生在if或者使用布尔运算时, or ,或者not 。 目前尚不清楚结果应该是什么。 它应该是真的,因为它不是zoleolength? 是的,因为有假值? 目前还不清楚,相反,熊猫提出了一个ValueError -

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

output如下 -

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

if条件,不清楚如何处理它。 该错误暗示是否使用None或其中any of those

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

output如下 -

I am any

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

import pandas as pd
print pd.Series([True]).bool()

output如下 -

True

按位布尔值

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

import pandas as pd
s = pd.Series(range(5))
print s==4

output如下 -

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

isin Operation

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

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

output如下 -

0 True
1 False
2 True
dtype: bool

重新索引与ix Gotcha

许多用户会发现自己使用ix indexing capabilities作为从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 df.ix[['b', 'c', 'e']]

output如下 -

          one        two      three       four
a   -1.582025   1.335773   0.961417  -1.272084
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
d   -2.380648  -0.029981   0.196489   0.531714
e    1.846746   0.148149   0.275398  -0.244559
f   -1.842662  -0.933195   2.303949   0.677641
          one        two      three       four
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
e    1.846746   0.148149   0.275398  -0.244559

当然,在这种情况下,这与使用reindex方法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 df.reindex(['b', 'c', 'e'])

output如下 -

          one        two      three       four
a    1.639081   1.369838   0.261287  -1.662003
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
d   -1.078791  -0.612607  -0.897289  -1.146893
e    0.465215   1.552873  -1.841959   0.329404
f    0.966022  -0.190077   1.324247   0.678064
          one        two      three       four
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
e    0.465215   1.552873  -1.841959   0.329404

有些人可能会得出结论,基于此, ixreindex是100%等效的。 除了整数索引的情况之外,这是正确的。 例如,上述操作也可以表示为 -

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 df.ix[[1, 2, 4]]
print df.reindex([1, 2, 4])

output如下 -

          one        two      three       four
a   -1.015695  -0.553847   1.106235  -0.784460
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
d   -1.238016  -0.749554  -0.547470  -0.029045
e   -0.056788   1.063999  -0.767220   0.212476
f    1.139714   0.036159   0.201912   0.710119
          one        two      three       four
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
e   -0.056788   1.063999  -0.767220   0.212476
    one  two  three  four
1   NaN  NaN    NaN   NaN
2   NaN  NaN    NaN   NaN
4   NaN  NaN    NaN   NaN

重要的是要记住reindex is strict label indexing only 。 在索引包含整数和字符串的病态情况下,这可能会导致一些可能令人惊讶的结果。

最后更新:

类似资料

  • 考虑以下代码位: 计算机结果将在未来产生,那么val的引入将如何防止我将结果发送给错误的发件人?假设我有一个完全不同的发送者(发送者1和发送者2)。 Sender1 首先发送一条消息,然后发送 Sender2。如果没有上述方法中的 val,我清楚地看到我的 Sender2 有可能获得实际上针对 Sender1 的结果。 我不明白的是,val的引入将如何阻止我刚才描述的场景?

  •  Turandot: Gli enigmi sono tre, la morte una! Caleph: No, no! Gli enigmi sono tre, una la vita! Puccini 将保留字和字符声明为变量名. 1 case=value0 # 引发错误. 2 23skidoo=value1 # 也会有错误. 3 # 以数字开头的变量名是由

相关阅读