2017-08-29 2 views
0

Ich habe einen Datenrahmen df, den ich in Json-Ausgabe exportieren möchte. Ich muss auch auf zwei Spalten filtern, sagen wir Spalte a und Spalte b. Standardmäßig muss ich den gesamten Datenrahmen exportieren, aber ich möchte auch Werte an Spalte a und Spalte b als optionale Variablen übergeben, um nur bestimmte Daten zu exportieren. Wenn zum Beispiel col a = "yes" und col b = "red", exportieren Sie es. Ich habe es versucht: df.to_json, aber ich möchte auch wissen, wie man filtert. Wie kann ich das erreichen? Ich bin neu in Pandas und Python, bitte geben Sie detailliertere Erklärungen. Jede Hilfe wird geschätzt, vielen Dank!export dataframe zu json mit zwei Filtern

+1

Es wäre hilfreich, wenn Sie einen grundlegenden Datenrahmen hätten, um ein reproduzierbares Ergebnis zu erhalten. –

+0

Was ist wenn col a nicht "ja" oder col b nicht "rot" ist? –

+0

col a könnte ja oder nein sein, col b könnte "rot", "schwarz", "grün", "blau" usw. sein, um es auf eine SQL-Art zu setzen: es ist ähnlich wie * aus Tabelle auswählen und * auswählen aus der Tabelle, wo col a = '' ja 'und col b =' rot '. Die Where-Bedingung ist jedoch optional. Standardmäßig sollte alles exportiert werden, außer wenn ich die Bedingung festlege, dass nur bestimmte Daten exportiert werden sollen. – user3062229

Antwort

0

Ich denke, Sie brauchen boolean indexing mit & (and), aber ist auch erforderlich, überprüfen Sie, ob alle Werte benötigen. Lösung ist eine weitere Bedingungen hinzufügen und verketten mit | (or).

df = pd.DataFrame({'col a':['yes','no','yes', 'yes'], 
        'col b':['red','green','orange','red']}) 
print (df) 
    col a col b 
0 yes  red 
1 no green 
2 yes orange 
3 yes  red 

def filtering(a='ALL',b='ALL'): 

    m1 = df['col a'] == a 
    m2 = df['col b'] == b 
    m3 = a == 'ALL' 
    m4 = b == 'ALL' 
    return df[(m1|m3) & (m2|m4)].to_json() 

print (filtering()) 
{"col a":{"0":"yes","1":"no","2":"yes","3":"yes"}, 
"col b":{"0":"red","1":"green","2":"orange","3":"red"}} 

print (filtering('yes','red')) 
{"col a":{"0":"yes","3":"yes"},"col b":{"0":"red","3":"red"}} 

EDIT:

Für das Filtern von Listen von Werten Lösung ähnlich, nur Bedingungen geändert - Notwendigkeit isin und in (ändern ALL bis zu einem gewissen universellen Wert nie in Daten):

def filtering(a=['ALL'],b=['ALL']): 

    m1 = df['col a'].isin(a) 
    m2 = df['col b'].isin(b) 
    m3 = 'ALL' in a 
    m4 = 'ALL' in b 
    return df[(m1|m3) & (m2|m4)].to_json() 
print (filtering()) 
{"col a":{"0":"yes","1":"no","2":"yes","3":"yes"}, 
"col b":{"0":"red","1":"green","2":"orange","3":"red"}} 

print (filtering(['yes'],['red', 'orange'])) 
{"col a":{"0":"yes","2":"yes","3":"yes"}, 
"col b":{"0":"red","2":"orange","3":"red"}} 
+0

dies hilft aber, wie diese beiden Bedingungen optional machen? – user3062229

+0

Was bedeutet das? Kannst du mehr erklären? oder brauchen Sie stattdessen ein Zeichen "rot" für den Export aller Zeilen, ähnlich für "ja"? – jezrael

+0

Ich brauche eine Funktion, um den Datenrahmen nach json mit allen Daten als Standard und optionale Filterung auf Col a und Col b zu exportieren. Angenommen, ich habe diese Funktion df2json (df, a, b). a (ja) und b (rot) wären die optionalen Variablen, die an diese Funktion übergeben werden. – user3062229