【问题标题】:How to filter values where there is string values in python?如何过滤python中有字符串值的值?
【发布时间】:2020-03-19 21:42:12
【问题描述】:

我的 df 为:

   Numbers   String   AlphaNumString
0   123       sea       sea123
1   456       sky       sky456
3   456'      sky1      nuts
4   Nan       tea3      45tea
5   562       656       L2.36
6   896       light     5642
7   s456      Nan       Nan
8   963       lf56      pe562
9   456%      per       per789
10  Nan       456       123k

输出:df1 在Numbers 列中过滤掉包含纯数值或Nan 的行。

   Numbers   String   AlphaNumString
0   123       sea       sea123
1   456       sky       sky456
2   Nan       tea3      45tea
3   562       656       L2.36
4   896       light     5642
5   963       lf56      pe562
6   Nan       456       123k

【问题讨论】:

  • 如果您发布代码和遇到的问题,我会更容易提供帮助
  • df[~df.Numbers.str.contains(r'[a-zA-Z]')] 我正在使用此代码,但问题是,此代码不包括 Nan 并且还保留字符串值,例如456'。

标签: python regex python-3.x pandas python-2.7


【解决方案1】:

无需使用正则表达式。

只运行df[df.Numbers.isna() | df.Numbers.str.isnumeric()],即选择行 其中数字列:

  • 要么是NaN
  • 或内容可转换为数字。

但是,如果您想将允许的数值“限制”为整数, 将此表达式更改为:

df[df.Numbers.isna() | df.Numbers.str.isdigit()]

【讨论】:

  • 我相信 isdigit() 函数不适用于浮点数据类型。
  • 对于 float 数据类型它不起作用。但是这一列也包含字母,所以它是 od object 类型。实际上,更通用的解决方案是将检查列类型作为第一步。如果类型是 float 则应返回所有行。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
相关资源
最近更新 更多