2016-07-07 100 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

相關問題