2016-06-29 8 views
0

Вот отрывок из следующего набора данных в формате CSV:Как удалить целую строку данных, заданную условием для столбца в файле csv?

quantity revenue  time_x transaction_id user_id 
    1  0  57:57.0 0  0    0 
    1  0  18:59.0 0  1 

Я хочу, чтобы удалить всю строку, когда user_id пуст. Как это сделать в python? До сих пор вот мой код:

activity = pd.read_csv("activity(delimited).csv", delimiter=';', error_bad_lines=False, dtype=object) 
impression = pd.read_csv("impression(delimited).csv", delimiter=';', error_bad_lines=False, dtype=object) 
click = pd.read_csv("click(delimited).csv", delimiter=';', error_bad_lines=False, dtype=object) 

pre_merge = activity.merge(impression, on="user_id", how="outer") 
merged = pre_merge.merge(click, on="user_id", how="outer") 
merged.to_csv("merged.csv", index=False) 

open_merged = pd.read_csv("merged.csv", delimiter=',', error_bad_lines= False, dtype=object) 

filtered_merged = open_merged.dropna(axis='columns', how='all') 

Также, как я могу написать код эффективным образом?

ответ

2

с пандами:

import pandas as pd 

df = pd.read_csv("path/to/csv/data.csv", delimiter=';', error_bad_lines=False) 
df = df[pd.notnull(df.user_id)] # boolean indexing 

# Shift user_id to first column 
df = df.set_index("user_id") 
df = df.reset_index() 

df.to_csv("path/to/csv/data.csv", index=False) 

Скоба нотация позволяет обеспечить Iterable булевых значений. Это называется boolean indexing. Подобные понятия и синтаксис используются в numpy, matlab и R

+0

Спасибо, это работает. Кроме того, как я могу перенести столбец user_id в первый столбец? – Technologic27

+0

@ Technolohic27 см. Редактирование. –

+0

@ Technolohic27 подумайте о принятии ответа. Благодарю. –

0

Разный стиль: получить данные, присоединиться и удалить. Храните пространство имен в чистоте.

activity = pd.read_csv("activity(delimited).csv", delimiter=';', error_bad_lines=False) 
impression = pd.read_csv("impression(delimited).csv", delimiter=';', error_bad_lines=False) 
pre_merge = activity.merge(impression, on="user_id", how="outer") 
del activity, impression 

click  = pd.read_csv("click(delimited).csv", delimiter=';', error_bad_lines=False) 
merged  = pre_merge.merge(click, on="user_id", how="outer") 
merged.to_csv("merged.csv", index=False) 
del click 

open_merged = pd.read_csv("merged.csv", error_bad_lines= False) 

filtered_merged = open_merged.dropna(axis='columns', how='all')