b2c電子商務(wù)網(wǎng)站主要操作流程怎么在百度上做廣告
需求:數(shù)據(jù)在后綴為xlsx的Excel的sheet1中且量比較大,比如幾十萬行幾百列;想查找一個關(guān)鍵字所在的行,比如"全網(wǎng)首發(fā)";
情況①知道關(guān)鍵字在哪一列
情況②不確定在哪一列,很多列相似又不同,本文演示遍歷所有數(shù)據(jù),但做點優(yōu)化避免浪費時間性能;
關(guān)鍵字可能是一串數(shù)字,日志的部分內(nèi)容,加密的某一段等
Excel實現(xiàn)和python實現(xiàn);
數(shù)據(jù)大概這樣子,這純粹是我瞎編的簡單演示數(shù)據(jù),假設(shè)關(guān)鍵字為中文,商品全稱、簡稱、特點列會造成查找重復(fù):
1.知道關(guān)鍵字在哪一列
比如關(guān)鍵字在?商品簡稱 這一列!
1.1excel實現(xiàn)
①直接用篩選,包含,推薦!
②超級表ctrl+T,小數(shù)據(jù)可以這樣,數(shù)據(jù)多不推薦,就是將表本身的數(shù)據(jù)變成了插入的表格,超級表的篩選功能貌似更強,但數(shù)據(jù)一多,超級表會很卡;
③用Excel本身的函數(shù):不推薦,麻煩不好用,比如關(guān)鍵字是? 猛火
函數(shù)嵌套大致這樣:
先在sheet2中,弄一個輔助列(本文是演示,其實可以將輔助列的結(jié)果包在函數(shù)中),用函數(shù)判斷,這對鎖行、列號和excel的公式功底有一定的要求;
find("查找關(guān)鍵字","哪個單元格")-->找到返回起始位置,沒有返回錯誤;
輔助列中,找商品簡稱列,有沒有包含猛火;可以看到輔助列,3和4就是sheet1中商品簡稱那一列有;
再疊加if,如果輔助列不是錯誤,就用index返回sheet1中對應(yīng)數(shù)據(jù),都需要往右邊推一列,因為輔助列占了一個位置,或者其他函數(shù),大概就是先這樣,再那樣,就行啦。
然后定位,錯誤,刪掉,但我們的數(shù)據(jù)是很大的,而且excel的函數(shù)但凡寫多點就令人窒息。
④power query、VBA、數(shù)據(jù)透視表,一般用這些稍微復(fù)雜點的方法,那肯定是經(jīng)常做這些方面的工作,基本懂的都會用,本文主講臨時需求,簡單高效干完就擦屁股完事。
1.2python實現(xiàn)
讀寫文件用pandas庫為例
例如,我們知道這個關(guān)鍵字,必然在“商品簡稱”之中:
import pandas as pd
path = "d:/test.xlsx"
df = pd.read_excel(path)row_list= [] # 存符合條件的行號
for index_num in df.index:data = df.loc[index_num,"商品簡稱"]if data.find("家用")!=-1:print(data)row_list.append(index_num)
print(row_list)
?find方法,找到了返回關(guān)鍵字在str中起始位置,找不到返回-1;
別用str.contains方法,因為你會遇到很討厭的錯誤!同時避免了正則,運行效率upupup。
2.假如列很多,根本就不知道關(guān)鍵字在哪一列
此時excel就很蛋疼了,感覺應(yīng)該可以,但是并不想去弄。
python實現(xiàn):
此時基本上是遍歷數(shù)據(jù)硬來了,可以自寫方法,iloc或者loc,根據(jù)數(shù)據(jù)類型從行、列df.index,df.columns遍歷都行;
不過推薦使用一個函數(shù)iterrows(),返回df的行索引和df每一個行數(shù)據(jù),注意是行數(shù)據(jù)series類型;
row_list= []
for row_index,row_data in df.iterrows():try:for col in df.columns:cell_data = df.loc[row_index,col]# if str(row_data[col]).find("猛火")!=-1:if str(cell_data).find("猛火")!=-1:row_list.append(row_index)raise ValueError("已找到條件")except:passprint(row_list)
①為什么要用try,except?
因為我們要的數(shù)據(jù)是整個行,只要其中某一列符合條件,整行都要。但凡哪一列找到了關(guān)鍵字,結(jié)果存到list中,直接報個錯,避免了往后面的列遍歷的無用功,比set去重好;
②注意要str(cell_data),因為時間列這種東西,總會出點小問題;