2017-11-09 5 views
0

私はメッセージショップのposデータを持っています。 データは添付の画像のとおりです。 enter image description hereposデータ用のPythonの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) 

のために作りたいです。 1つは動かない。 2番目私はshop_numbermessager_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

dataはpythonの中でデータを入力するためのパンダのデータフレームです。 – Tateishi

答えて

0

あなたはPythonで文字列を使用してデータを比較したい場合は、あなたが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

あなたは100000行を意味しますか?なぜそれが問題になるのでしょうか? '.loc []'は同じ長さのブール値を持つリストのようなものを受け入れることができます –

+0

私はlocを使って "return"データを見つけることを意味しますか?次に、自分で作成したリストの値を変更するために、 "return"データの['cashier_no']&['sales']を選択します。 – Tateishi

関連する問題