删除pandas系列中的空列表

The*_*Cat 7 python list dataframe pandas

我有一个很长的系列如下:

series = pd.Series([[(1,2)],[(3,5)],[],[(3,5)]])

In [151]: series
Out[151]:
0    [(1, 2)]
1    [(3, 5)]
2          []
3    [(3, 5)]
dtype: object
Run Code Online (Sandbox Code Playgroud)

我想删除所有带有空列表的条目.出于某种原因,布尔索引不起作用.

以下测试都给出了相同的错误:

series == [[(1,2)]]
series == [(1,2)]

ValueError: Arrays were different lengths: 4 vs 1
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为在下面的简单示例中,索引的工作原理如上:

In [146]: pd.Series([1,2,3]) == [3]
Out[146]:
0    False
1    False
2     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

PS理想情况下,我想将系列中的元组拆分为两列的DataFrame.

Ale*_*ley 14

您可以使用以下命令检查列表是否为空str.len():

series.str.len() == 0
Run Code Online (Sandbox Code Playgroud)

然后使用此布尔系列删除包含空列表的行.

如果每个条目都是包含两元组(或者为空)str的列表,则可以使用访问器两次创建一个双列DataFrame (一次选择列表的第一个元素,然后访问元素元组):

pd.DataFrame({'a': series.str[0].str[0], 'b': series.str[0].str[1]})
Run Code Online (Sandbox Code Playgroud)

缺少条目默认NaN使用此方法.

  • 我猜`str.len()`虽然打算用于字符串,但只调用了对象的底层`__len __()`方法.通常为列表派上用场! (3认同)

Meo*_*eow 6

使用内置的 apply 您可以按列表的长度进行过滤:

series = pd.Series([[(1,2)],[(3,5)],[],[(3,5)]])
series = series[series.apply(len) > 0]
Run Code Online (Sandbox Code Playgroud)