Pandas Caveats & Gotchas Pandas稀疏数据 Pandas与SQL比较 警告意味着警告和疑难意味着一个看不见的问题。 使用If / Truth陈述与Pandas 当你尝试将某些东西转换成 布尔值 时,Pandas遵循错误的惯例提出错误。这发生在 如果 或 当 使用布尔运算,并且, 或者 ,或者 不是 。目前尚不清楚结果应该如何。它应该是真的,因为它不是零强度的?由于存在假值,是否为假?目前尚不清楚,相反,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(). 在条件 允许的 情况下,不清楚该如何处理。错误提示是否使用 无 或 任何这些 。 import pandas as pd if pd.Series([False, True, False]).any(): print("I am any") 其 输出 如下 - 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 运行 这将返回一个布尔序列,显示序列中的每个元素是否完全包含在传递的值序列中。 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 Reindexing vs ix Gotcha 许多用户会发现自己使用 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 df.ix[['b', 'c', 'e']] 其 输出 如下 - 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 方法 完全相同 - 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']) 其 输出 如下 - 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 有些人可能会得出这样的结论: ix 和 reindex 是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]) 其 输出 如下 - 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只是严格的标签索引 。这可能会导致一些潜在的令人惊讶的结果,例如索引包含整数和字符串的病态情况。 Pandas稀疏数据 Pandas与SQL比较