2016-09-16 74 views
2

我是Python新手,希望對如何解決此問題提供一些幫助。以下是我正在嘗試執行的操作:讀取CSV並根據關鍵字列表替換一列

  1. 讀取具有事務列表的CSV文件。每行有6列。
  2. 對於每一行,將DESCRIPTION列與關鍵字列表進行比較,以查看任何單詞是否與關鍵字列表中的單詞匹配。
    |Col0 | Col1 | Col2 | Col3 "DESCRIPTION" | Col4 | Col5 "CATEGORY"|

  3. 如果任何字從關鍵字列表匹配的東西,更換CATEGORY柱與對應於特定的關鍵字列表(例如:"Groceries")的新條目。

  4. 繼續遍歷每行,將其與幾個關鍵字列表進行比較。如果匹配,則將每行中的第5列(CATEGORY)替換爲相應的值。
  5. 保存到新的CSV文件。

這是我到目前爲止有:

import csv 

grocery_keyword = ['GIANT', 'SAFEWAY', 'KROGER'] 

with open('Trans.csv') as csvFile: 
    reader = csv.reader(csvFile, delimiter=",") 
    my_list = list(reader) 

    for row in my_list: 
     for index, item in enumerate(row): 
      if any grocery_keyword in row: 
       row[index] = item.replace("", "Grocery") 

newCSVFile = 'newCSVFile.csv' 
    with open(newCSVFile, "w") as output: 
     writer = csv.writer(output, delimiter=",", quotechar='"', 
          quoting=csv.QUOTE_MINIMAL, lineterminator='\n') 
     writer.writerows(my_list) 
csvFile.close() 

是一個列表在這裏使用了正確的事情?我應該如何對列和關鍵字列表進行比較?

+0

找到了,謝謝! – elboc

+2

如果說明類別與多個關鍵字匹配,您會在CATEGORY中看到什麼? – scagnetti

+0

好問題,我還沒有想過這麼遠。我計劃的名單有互斥關鍵字。對於其他與關鍵字不匹配的行,我將不得不手動對它們進行排序。 – elboc

回答

0

我發現pandas庫對這種類型的東西非常適用。我確信find_cat def可以加快一點,但是希望得到將搜索&替換應用於所傳遞列的想法。

import pandas as pd 


def find_cat(desc, cat_dict): 
    cat_list = [] 
    for cat in cat_dict: 
     for w in cat_dict[cat]: 
      if w in desc: 
       cat_list.append(cat) 
    return cat_list 


cat_d = { 
    "cat1": ["1_word_1", "1_word_2"], 
    "cat2": ["2_word_1", "2_word_2"], 
    "cat3": ["3_word_1", "3_word_2"] 
} 


df = pd.read_csv('in.csv') 
df["category"] = df[["description"]].apply(lambda row: find_cat(row["description"], cat_d), axis=1) 
df.to_csv('out.csv') 

其中in.csv包含:

col1,col2,col3,col4,description,category 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_2, 
0,0,0,0,1_word_1, 
0,0,0,0,3_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_2, 
0,0,0,0,1_word_1, 
0,0,0,0,2_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_2, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,2_word_2, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_1, 
0,0,0,0,1_word_2, 
0,0,0,0,1_word_1, 
0,0,0,0,2_word_1, 

,併產生out.csv:

,col1,col2,col3,col4,description,category 
0,0,0,0,0,1_word_1,cat1 
1,0,0,0,0,1_word_2,cat1 
2,0,0,0,0,1_word_1,cat1 
3,0,0,0,0,3_word_1,cat3 
4,0,0,0,0,1_word_1,cat1 
5,0,0,0,0,1_word_1,cat1 
6,0,0,0,0,1_word_2,cat1 
7,0,0,0,0,1_word_1,cat1 
8,0,0,0,0,2_word_1,cat2 
9,0,0,0,0,1_word_1,cat1 
10,0,0,0,0,1_word_2,cat1 
11,0,0,0,0,1_word_1,cat1 
12,0,0,0,0,1_word_1,cat1 
13,0,0,0,0,1_word_1,cat1 
14,0,0,0,0,2_word_2,cat2 
15,0,0,0,0,1_word_1,cat1 
16,0,0,0,0,1_word_1,cat1 
17,0,0,0,0,1_word_1,cat1 
18,0,0,0,0,1_word_1,cat1 
19,0,0,0,0,1_word_2,cat1 
20,0,0,0,0,1_word_1,cat1 
21,0,0,0,0,2_word_1,cat2 
+0

當我向字典中添加特定字符串時,出現錯誤。我認爲這是撇號或哈希標記的問題,但我無法弄清楚如何解決它。 字符串:「ZOE'S#2」 「cat1」:[「1_word_1」,「ZOE'S#2」], 我試過了: 1.「ZOE'S#2」(原樣) - 失敗, 'S#2' - 完成但與相關行不符, 3.「ZOE \'S \#2」 - 完成但與相關行不匹配, 我錯過了什麼? – elboc

相關問題