Pandas str.isnumeric() 的预期行为

Expected behavior of Pandas str.isnumeric()

提问人:Andrew 提问时间:7/31/2018 更新时间:7/31/2018 访问量:8068

问:

我有一个多 dtype 系列,比如pd.Series[100, 50, 0, foo, bar, baz]

当我跑步时pd.Series.str.isnumeric()

我明白了[NaN, NaN, NaN, False, False, False]

为什么会这样?它不应该在这个系列的前三个回归吗?True

Python 字符串 pandas

评论

0赞 user3483203 7/31/2018
运行应该会给你一个错误。pd.Series.str.isnumeric()

答:

13赞 jpp 7/31/2018 #1

Pandas 字符串方法紧跟 Python 方法:

str.isnumeric(100)    # TypeError
str.isnumeric('100')  # True
str.isnumeric('a10')  # False

任何产生错误的类型都会给出 .根据 Python 文档,仅适用于字符串:NaNstr.isnumeric

str.isnumeric()
如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回 true false 否则。

根据 Pandas 文档,相当于:pd.Series.str.isnumericstr.isnumeric

Series.str.isnumeric()
检查 Series/Index 中每个字符串中的所有字符是否都是数字。等效于 。
str.isnumeric()

您的系列具有“对象”dtype,这是一个包罗万象的类型,它包含指向任意 Python 对象的指针。这些可能是字符串、整数等的混合。因此,您应该期望找不到字符串的值。NaN

为了适应数值类型,您需要显式转换为字符串,例如给定一个系列:s

s.astype(str).str.isnumeric()

评论

0赞 Andrew 7/31/2018
还行。我认为这回答了这个问题。所以我的 Series 作为 Object dtype 读入,但实际值是一些字符串和一些 int,因此 int 值的计算结果为 nan,因为它们不是字符串。
0赞 jpp 7/31/2018
@Andrew,是的,确实如此,我用更详细的描述更新了我的答案。
5赞 user3483203 7/31/2018 #2

使用字符串访问器正在将您的数字转换为 ,它甚至在您尝试使用之前就发生了:NaNisnumeric

s = pd.Series([100, 50, 0, 'foo', 'bar', 'baz'])
s.str[:]

0    NaN
1    NaN
2    NaN
3    foo
4    bar
5    baz
dtype: object

因此,当您使用 时,'s 仍然存在。请先使用 astypeNaNisnumeric

s.astype(str).str.isnumeric()

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

评论

0赞 Andrew 7/31/2018
谢谢。这回答了我的问题,但@jpp先回答了。