2017-11-09 3 views
0

메시지 가게의 pos 데이터가 있습니다. 데이터는 첨부 된 그림과 같습니다. enter image description herepos 데이터 용 파이썬에서 for-loop 데이터 청소

##read data from csv 
data = pd.read_csv('test1.csv') 
#make a kist for each column 
sales_id = list(data['sales_id']) 
shop_number = list(data['shop_number']) 
sales = list(data['sales']) 
cashier_no = list(data['cashier_no']) 
messager_no = list(data['messager_no']) 
type_of_sale = list(data['type_of_sale']) 
costomer_ID = list(data['costomer_ID']) 
type_of_sale = list(data['type_of_sale']) 
date = list(data['date']) 
time = list(data['time']) 

나는 구매의 데이터가 삭제되어야 함을 보여주는 새로운 목록을 작성합니다. 이 같은 :

data_to_clean= [0,1,0,1,0,0,1,0,1] 

그것을 할 나는 루프

for i in range(len(type_of_sale)): 
    data_to_clean=[] 
    if type_of_sale[i] == "purchase": 
     data_to_clean = data_to_clean.append(0) 
    elif type_of_sale[i] == "return": 
     data_to_clean = data_to_clean.append(1) 
     ## I want to write a code so I can delete purchasse data too 
     #with conditions if it has the same shop_number,messager_no,costomer_ID and -price 

    return list(data_to_clean) 

이 코드에서 두 가지 문제가 있습니다에 대한 만들고 싶어. 하나는 움직이지 않는다. 둘째로 shop_number, messager_nocostomer_ID을 확인하여 내 data_to_clean 목록에 1 또는 0을 입력하는 방법을 모른다. 가끔 sales_id(1628060)과 같은 데이터를 확인해야 할 때가 있습니다. sales_id(1599414) 점원이 다를 수 있음을 알고 계십시오. 하지만 constomer_Id는 항상 동일해야합니다.

질문은 어떤 데이터를 삭제해야하는지 보여주기 위해 0과 1로 목록이나 데이터 프레임을 만들 수 있도록 코드를 작성하는 방법입니다. 파이썬에서 문자열로 데이터를 비교할 때

+0

무엇을'데이터 = pd.read_csv ('test1.csv') ' 반환? –

+0

'list.append()'는'None'을 반환하므로'data_to_clean = data_to_clean.append (0)'이 예상대로 작동하지 않습니다. –

+0

데이터는 파이썬 안에 데이터를 입력하기위한 판다 데이터 프레임입니다. – Tateishi

답변

0

, 당신은 qoutes이 string을 넣어해야합니다

for i in range(len(type_of_sale)): 
     data_to_clean=[] 
     if type_of_sale[i] == "purchase": # here 
      data_to_clean = data_to_clean.append(0) 
     elif type_of_sale[i] == "return": # and here 
      data_to_clean = data_to_clean.append(1) 
+0

이것은 반환 데이터 만 정리합니다. 여전히 청소하려는 구매 데이터가 있습니다. 같은 costomer_ID 및 - 가격이 너무 낮은 구매 데이터를 정리하고 싶습니다. – Tateishi

0

체크 pandas doc합니다. 당신이 점원의 판매를 원하는 경우에 간단

returns = data.loc[data['type_of_sale'] == 'return'] 

로 반환 명령을있는 아이템을 얻는 것은 될 수 90

data.loc[(data['type_of_sale'] == 'purchase') & (data['cashier_no'] == 90)] 
+0

내 데이터에 10000 개 이상의 입력이 있습니다. 어떻게 모든 데이터를 지우기 위해'loc'을 사용할 수 있습니까? – Tateishi

+0

100,000 개의 행을 의미합니까? 왜 그게 문제가되는거야? '.loc []'는 같은 길이의 부울 값을 가진리스트를 받아 들일 수 있습니다 –

+0

loc를 사용하여 "return"데이터를 찾습니다. 그런 다음 'return'데이터의 [cashier_no '] & ['sales ']를 선택하여 직접 작성한 목록의 값을 변경합니다. – Tateishi