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使用此方法.
使用内置的 apply 您可以按列表的长度进行过滤:
series = pd.Series([[(1,2)],[(3,5)],[],[(3,5)]])
series = series[series.apply(len) > 0]
Run Code Online (Sandbox Code Playgroud)