提问人:Andrew 提问时间:7/31/2018 更新时间:7/31/2018 访问量:8068
Pandas str.isnumeric() 的预期行为
Expected behavior of Pandas str.isnumeric()
问:
我有一个多 dtype 系列,比如pd.Series
[100, 50, 0, foo, bar, baz]
当我跑步时pd.Series.str.isnumeric()
我明白了[NaN, NaN, NaN, False, False, False]
为什么会这样?它不应该在这个系列的前三个回归吗?True
答:
13赞
jpp
7/31/2018
#1
Pandas 字符串方法紧跟 Python 方法:
str.isnumeric(100) # TypeError
str.isnumeric('100') # True
str.isnumeric('a10') # False
任何产生错误的类型都会给出 .根据 Python 文档,仅适用于字符串:NaN
str.isnumeric
str.isnumeric()
如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回 true false 否则。
根据 Pandas 文档,相当于:pd.Series.str.isnumeric
str.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
使用字符串访问器正在将您的数字转换为 ,它甚至在您尝试使用之前就发生了:NaN
isnumeric
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 仍然存在。请先使用 astype
:NaN
isnumeric
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先回答了。
评论
pd.Series.str.isnumeric()