计算Pandas列中字符串内的数值

时间:2015-05-14 01:59:06

标签: python string pandas count

我有一个pandas数据框,我可以选择一个我想看的列:

myForm <- "Species~Petal.Length"
class(myForm)
# [1] "character"
myForm <- as.formula(myForm)
class(myForm)
# [1] "formula"
myForm
# Species ~ Petal.Length

lda(formula=myForm, data=iris)
# Call:
# lda(myForm, data = iris)

# Prior probabilities of groups:
#     setosa versicolor  virginica 
#  0.3333333  0.3333333  0.3333333 

# Group means:
#            Petal.Length
# setosa            1.462
# versicolor        4.260
# virginica         5.552

# Coefficients of linear discriminants:
#                   LD1
# Petal.Length 2.323774

如果我打印column_x,我会得到:

column_x = str(data_frame[4])

我想计算包含值AF1000g = 0.05或更少的行数。以及包含值AF1000g = 0.06或更高的行。

0     AF1000g=0.09
1     AF1000g=0.00
2     AF1000g=0.14
3     AF1000g=0.02
4     AF1000g=0.02
5     AF1000g=0.00
6     AF1000g=0.54
7     AF1000g=0.01
8     AF1000g=0.00
9     AF1000g=0.04
10    AF1000g=0.00
11    AF1000g=0.03
12    AF1000g=0.00
13    AF1000g=0.02
14    AF1000g=0.00
...

如果列中的值是包含字符串和数字内容的String,我如何计算此列中的这些值?

谢谢。

罗德里戈

2 个答案:

答案 0 :(得分:1)

您可以使用apply提取数值,并在那里进行计数:

vals = column_x.apply(lambda x: float(x.split('=')[1]))
print sum(vals <= 0.05) #number of rows with AF1000g=0.05 and less
print sum(vals >= 0.06) #number of rows with AF1000g=0.06 and greater

答案 1 :(得分:1)

上面的评论很有用。通常,您应该在分析之前专注于解析。

那就是说,这并不难。将pd.Series.str.extract与正则表达式一起使用,然后强制使用浮点数,然后对其执行操作。

 floats = column_x.str.extract("^AF1000g=(.*)$").astype(float)
 num_less = (vals <= 0.05).sum()
 num_greater = (vals > 0.05).sum()

这利用了与vals比较返回的布尔数组可以强制为0和1的事实。