2017-02-11 5 views
0

Ich benutze die Pandas-Bibliothek, um in einer CSV-Datei mit Python zu laden.Schreiben in eine CSV mit Pandas mit Filtern

import pandas as pd 
df = pd.read_csv("movies.csv") 

ich dann die Spalten für bestimmte Werte oder Aussagen überprüft, wie zB:

viewNum = df["views"] >= 1000 
starringActorNum = df["starring"] > 3 
df["title"] = df["title"].astype("str") 
titleLen = df["title"].str.len() <= 10 

Ich mag die Kriterien oben eine neue CSV-Datei erstellen, aber noch nicht sicher bin, wie das zu tun und wie man all diese Attribute zu einem CSV kombiniert.

Wer hat irgendwelche Ideen?

+0

Sie möchten Ihre Datenrahmen mit all den Einschränkungen, die Sie dort angewendet werden parallel präsentieren gefiltert haben? – languitar

+0

Ja. Ich habe ein .csv-Dataset, in das ich geladen habe, möchte aber einen Teil des Inhalts anhand bestimmter Kriterien herausfiltern (daher die obigen Beispiele). Ich weiß einfach nicht, wie ich alle meine Constraints in einen CSV übersetze – natalien

Antwort

1

die Booleschen Masken Kombinieren & mit (bitweise und):

mask = viewNum & starringActorNum & titleLen 

die Zeilen von df wählen, wo mask Wahr ist:

df_filtered = df.loc[mask] 

die Datenrahmen in eine CSV schreiben:

df_filtered.to_csv('movies-filtered.csv') 

import pandas as pd 

df = pd.read_csv("movies.csv") 

viewNum = df["views"] >= 1000 
starringActorNum = df["starring"] > 3 
df["title"] = df["title"].astype("str") 
titleLen = df["title"].str.len() <= 10 

mask = viewNum & starringActorNum & titleLen 
df_filtered = df.loc[mask] 

df_filtered.to_csv('movies-filtered.csv') 
0

Sie können die Schnittstelle panda.DataFrame.query() verwenden. Es ermöglicht Text-String-Abfragen und ist sehr schnell für große Datenmengen.

So etwas sollte funktionieren:

import pandas as pd 
df = pd.read_csv("movies.csv") 

# the len() method is not available to query, so pre-calculate 
title_len = df["title"].str.len() 

# build the data frame and send to csv file, title_len is a local variable 
df.query('views >= 1000 and starring > 3 and @title_len <= 10').to_csv(...) 
Verwandte Themen