2016-09-16 2 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 def가 다소 빨라질 수는 있지만, 전달 된 열에 적용된 검색 & 대체 아이디어를 얻고 싶었습니다.

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 생산 :

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,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" 예 : 1. "ZOE 'S # 2"(있는 그대로) - 실패, 빈 값 오류가 발생 함, 2. "ZOE 'S # 2"(있는 그대로) - "ZOE 'S # 2", [ "1_word_1", "ZOE 'S # 2"], 2. " "S # 2"- 완료되지만 관련 행과 일치하지 않습니다. 3. "ZOE \ 'S \ # 2"- 완료되지만 관련 행과 일치하지 않습니다. 무엇이 누락 되었습니까? – elboc

관련 문제