Python Pandas DataFrame:使用数字计算单元格数

Python Pandas DataFrame:使用数字计算单元格数,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下几点: 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。即,除“

我有以下几点:

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.5112,19.20,5+5-10+0.2

我想我需要把它改成正则表达式,因为负数和带“+”的数字都不被计算

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

使用正则表达式,通过
^
$
确保整个字符串具有
-,+,digit,.

non_text_count = df.answer.str.contains("^[-+\d\.]+$").sum()
# gives 5
计算包含数字文本的条目数[…]看起来如何

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

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

您可以发布给定示例数据帧的预期输出吗?
5+5-10+0.2
;这算是“唯一的数字”吗?@MustafaAydın好的,我错过了。是的。您要计数
5+5-10+0.2
?因为它的计算结果是一个数字?因此,预期输出是
5
而不是
4
?@HenryEcker正确。对不起,我忘记了,但现在相应地编辑了问题。太好了,谢谢。
包含文本但不包含nums的熊猫操作是什么
df[df['answer'].str.contains(contains_nums)==False]
似乎无法解决<代码>包含(df.answer.str.contains(“[-+\d\.]+”==False)
有效。