2016-07-07 602 views
0

最近我需要编写一个python脚本来找出在excel工作表中出现特定字符串的次数。如何使用xlwings或pandas获取所有非空单元格?

我注意到我们可以使用*xlwings.Range('A1').table.formula*来实现这个任务,只有当单元格是连续的。如果细胞不连续我怎么能做到这一点?

+0

标题和你的问题不匹配。你想获得非空单元格,还是计算给定字符串在数据框中的时间? – DeepSpace

+0

你想在特定的列中对它进行计数吗?或整个工作表中? @OmerBA覆盖整个工作表中的 – OmerBA

+0

。谢谢 –

回答

1

这是一个小黑客,但为什么不。顺便说一句,我假设你正在使用python 3.x.

首先创建一个与您正在查找的值匹配的新布尔数据框。

import pandas as pd 
import numpy as np 

df = pd.read_excel('path_to_your_excel..') 

b = df.applymap(lambda x: x == 'value_you_want_to_find' if isinstance(x, str) else False) 

然后简单地总结所有的发生。

print(np.count_nonzero(b.values)) 
+0

您实际上不必假定Python 3. Python 2也可以“打印(..)”。 – DeepSpace

+0

这是关于字符串检查。在python 2我会做isinstance(x,basestring):) – OmerBA

+0

确实,我错过了'if' – DeepSpace

0

正如在评论中澄清,如果你已经有了一个数据框,你可以简单地使用count(注:有必须是做一个更好的方式):

df = pd.DataFrame({'col_a': ['a'], 'col_b': ['ab'], 'col_c': ['c']}) 

string_to_search = '^a$' # should actually be a regex, in this example searching for 'a' 
print(sum(df[col].str.count(string_to_search).sum() for col in df.columns)) 
>> 1 
+0

感谢您的回复,@DeepSpace。看起来你的代码不起作用。什么是变量* string_to_search *用于?因为我找不到在第三行中调用的这个变量。 –

+0

@YusonKong我搞砸了,对不起。我修好了它。 – DeepSpace

相关问题