2016-09-16 7 views
2

私はPythonを初めて使いました。この問題へのアプローチ方法については、助けてください。ここに私がやろうとしていることがあります:CSVを読み込んでキーワードリストに基づいて列を置き換えます。

  1. トランザクションのリストでCSVファイルを読む。各行には6つの列があります。
  2. 各行について、DESCRIPTIONの列をキーワードのリストと比較して、キーワードリストに一致する単語があるかどうかを確認します。
    任意の単語がキーワードリストから何かに一致した場合 |Col0 | Col1 | Col2 | Col3 "DESCRIPTION" | Col4 | Col5 "CATEGORY"|

  3. 、その特定のキーワードリスト(例えば"Groceries")に対応する新しいエントリでCATEGORY列に置き換えます。

  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

私はパンダライブラリがこの種のものに適していることがわかりました。 find_catのデフが少しスピードアップできると確信していますが、通信のコラムに適用された検索&の置換の考え方を得たかったのです。

in.csvが含まれてい
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') 

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"(あると) - 失敗し、スロー空の値の誤差を、 2.「ZOE \ "S#2" - 完了しますが、関連行は一致しません 3.完了しますが、関連する行と一致しません 何が欠けていますか? – elboc

関連する問題