2017-06-13 50 views
2

嗨,它看起來像人們感到困惑,所以我已經打消了我的企圖,只剩問題的高度相關部分中的所有行刪除「無」:展望從數據幀

代碼來創建數據幀:

Sample = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': [.332, .326, .329]}, 
    {'account': 'Alpha Co', 'Jan': 200, 'Feb': 210, 'Mar': [[.234, .246], None]}, 
    {'account': 'Blue Inc', 'Jan': 50, 'Feb': 90, 'Mar': [[.23], [.745, .398, .923], None] }] 
df = pd.DataFrame(Sample) 

數據幀顯現:

df: 
    account  Jan  Feb   Mar 
Jones LLC |  150 | 200 | [.332, .326, .329] 
Alpha Co |  200 | 210 | [[.234, .246], None] 
Blue Inc |  50 | 90  | [[.23], [.745, .398, .923], None] 

我需要可以施加的df,從DF [「月」]刪除「無」的值的函數,與所述目標返回這個的:

df: 
    account  Jan  Feb   Mar 
Jones LLC |  150 | 200 | [.332, .326, .329] 
Alpha Co |  200 | 210 | [.234, .246] 
Blue Inc |  50 | 90  | [.23], [.745, .398, .923] 
+0

'nonefunction'結尾的'list_new'怎麼辦? –

+0

不確定這是否會有所幫助,但是您可以在列表理解中進行列表理解。像'[[y爲x,如果有的話] x爲df ['applicableColumn'] if something_else]'如果你想對每行的每個項目做些什麼 – TehTris

回答

1

可以通過嵌套列表理解:

df['Mar'] = [[x for x in inner_list if x is not None] for inner_list in df['Mar']]

您還可以使用filter過濾掉None

df['Mar'] = [list(filter(lambda x: x is None, inner_list)) for inner_list in df['Mar']]

+0

但是這對於一個數據幀會如何工作?像這樣:[[x爲df ['Column']中的x如果x不是None]爲df ['Column'] in df]? –

+0

我從來沒有與熊貓合作過,但我想你會用df ['Column']'和'outer_list'替換'inner_list'和'df' – user3080953

+0

使用我給出的例子,那將是 [[x在DF [ '月']如果x不是無]爲DF [ '月']在DF] X返回: [二月,二月,二月], [揚,揚,揚], [3月,3月,3月], [帳戶,帳戶,帳戶] –

0

假設mylist1是numpy數組,你可以做

mylist1[mylist1 != None] 

得到您想要的值。但是,如果您有多個陣列或列表,您希望在相同的索引處進行切片,則可以使用上述算法對enumerate進行調整,並以所需的索引輸出每個列表或數組。

+0

這適用於列表,問題是如何應用類似的函數來自df ['Mar']的每一行 :( –

+1

)您可以將列表轉換爲數組...你可以將答案應用於你的問題.. – mikey

+0

但我的問題是與一個數據框,而不是一個列表?我編輯的問題,以便它真的很容易複製。我正在尋找應用這個數據框與成千上萬的行,所以我需要一個循環遍歷每行的函數 –

1

@ user3080953幾乎解決了這個,但我希望把一個完整的答案留給後人的緣故:

df['New'] = [[[x for x in inner_list if x is not None]] for inner_list in df['Mar']] 

這將創建一個新的列,它是「無」 - 免費。我可以刪除df ['Mar']

謝謝大家!