2017-02-07 19 views
3

私は、2つのフィルタを使用してパンダを使用してcsvから行を削除する際にあなたの親切な助けを要求します。複数の列を持つパンダドロップ行

import pandas as pd 

moving = pd.read_csv('C:/Users/Salesdata.csv') 
df = pd.DataFrame(moving) 

df = df[df['Last Name, First Name'] != 'Reid, Mark and Connie' & df['Actual Sale Date'] == 3/8/2015] 

df.to_csv('improvedcsv.csv', index=False) 

マイデータ:

Last Name, First Name      Actual Sale Date 
Bugs, Rabbit and Bunny       12/11/2015 
Reid, Mark and Connie       3/8/2015 
Cortese, Robert and Laura      10/15/2014 
Reid, Mark and Connie       2/28/2015 

私は2015年3月8日でリード、マークとコニーを削除する必要があります。上記のドロップ列スニペットを実行すると、新しいcsvはNOデータを返し、列見出しだけを返します。この問題を解決するには、Pythonを手伝ってください。

+0

パンダでのみやりたいですか? –

答えて

4

あなたはすべてをフィルタリングする3/8/2015を囲む引用符を入れて、ロジックを少し変更する必要がありますあなたがフィルタリングしている状態と等しくないもの。また、各条件の周りにカッコが必要です。

df[~((df['Last Name, First Name'] == 'Reid, Mark and Connie') & 
    (df['Actual Sale Date'] == '3/8/2015'))] 
+0

ありがとう、しかしReid氏はまだ2回現れています。 –

+0

小さな編集をしました。あなたは正しい3行を返すしたいですか? –

+0

はい、2015年3月8日にReidを取り除いてください。 –

2

使用しているロジックに問題があります。 の発売日が2015年3月8日の「リード、マーク、コニー」が存在しないデータフレームの状況を見つけることをお勧めします。どの列でもありません。私はpandasを使用しています私の答えで

df = df[~((df['Last Name, First Name'] == 'Reid, Mark and Connie') and (df['Actual Sale Date'] == 3/8/2015))] 
+0

ありがとうございますが、この場合は動作しません。使用しなければならない場合は、あいまいなエラーが発生します。私は&とそれを編集し、それはまだ4行すべてのデータを示した。 –

2

:何が欲しいのはfolowingです。私は手動でそれを行うだろうと私はあなたの入力ファイルがinput_fileと呼ばれていると仮定します。

data = (k.rstrip().split() for k in open("input_file", 'r')) 
final = [k for k in data if k[-1] != '3/8/2015'] 

for k in final: 
    print(k) 

出力:

['Last', 'Name,', 'First', 'Name', 'Actual', 'Sale', 'Date'] 
['Bugs,', 'Rabbit', 'and', 'Bunny', '12/11/2015'] 
['Cortese,', 'Robert', 'and', 'Laura', '10/15/2014'] 
['Reid,', 'Mark', 'and', 'Connie', '2/28/2015'] 
関連する問題