2017-08-29 59 views
0

我有一個數據幀df,我想要導出到json輸出。我還需要過濾兩列,例如列a和列b。默認情況下,我需要導出整個數據框,但我也希望將值傳遞給列a和列b作爲可選變量,以僅導出某些數據。例如,當col a =「yes」和col b =「red」時,導出它。我試過這個:df.to_json,但我想知道如何過濾。 我如何實現這一目標?我是熊貓和python的新手,請提供更詳細的解釋。任何幫助表示讚賞,非常感謝你!用兩個過濾器將數據幀導出到json

+1

如果您有一個基本的數據框來創建可重複的結果,將會很有幫助。 –

+0

如果col a不是「yes」或col b不是「red」會怎麼樣? –

+0

col a可以是yes或no,col b可以是'red','black','green','blue'等以sql方式存放:類似於select * from table並選擇*從表中哪裏col a =''是'和col b ='紅色'。但是,where條件是可選的。默認情況下,它應該導出所有,但當我指定它只需要導出某些數據的條件。 – user3062229

回答

0

我認爲你需要boolean indexing&and),但是有必要檢查是否需要所有的值。解決方法是添加另一個條件並鏈接|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"}} 

編輯:

對於由值列表過濾是溶液相似,只有條件變化 - 需要isinin(從未在數據變化ALL一些普遍值):

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

這有幫助,但如何使這兩個條件可選? – user3062229

+0

這是什麼意思?你能解釋更多嗎?或者需要一些字符來代替'red'來導出所有行,類似於'yes'? – jezrael

+0

我需要一個函數將數據框導出爲json,並將所有數據作爲默認和可選的過濾列和列b。假設我有這個函數df2json(df,a,b)。一個(是)和b(紅色)將是傳遞給該函數的可選變量。 – user3062229