Pandas DataFrame:用数字计算单元格的数量

时间:2021-06-08 13:54:31

标签: python pandas dataframe

我有以下虚拟 df:

columns = ['answer']
data = ['hello there', '-1', '0.5', '112', 'hello world I am 99 years old', '33 or 1', '19.20', '5+5-10+0.2', 'x=20']
df = pd.DataFrame(columns=columns, data=data)

我想计算仅包含数字或数字和 +- 符号(整数、浮点数、正数、负数)而不包含其他文本的条目。对于虚拟 df,这将是 5。即,除“hello world 我 99 岁”、“x=20”和“33 或 1”之外的所有条目) 我的做法如下:

def find_numbers(some_value):
  if isinstance(some_value, int) or isinstance(some_value, float):
    True
df['answer'].apply(lambda x: len([t for t in x.split() if find_numbers(t)])).sum()

不幸的是,它返回 0。
预期输出:5
那将是条目 -1、0.5、112、19.20、5+5-10+0.2。

我想我无论如何都需要将其更改为正则表达式,因为负数和带有“+”的数字没有被计算在内?

  • 如果我只想计算包含数字和文本的条目数量(即“hello world 我 99 岁”、“x=20”和“33 或 1”),会是什么样子?

1 个答案:

答案 0 :(得分:1)

寻找一个通过 ^$ 确保整个字符串具有 -, +, digit, . 的正则表达式:

non_text_count = df.answer.str.contains("^[-+\d\.]+$").sum()
# gives 5
<块引用>

计算包含数字AND文本

的条目数会是什么样子的[...]

通过一种简单的方法,我们可以链接两个正则表达式:

contains_text = df.answer.str.contains("[A-Za-z]+")
contains_nums = df.answer.str.contains("[-+\d\.]+")
text_and_num_count = (contains_text & contains_nums).sum()
# gives 3
相关问题