2017-06-13 51 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']

谢谢大家!