首页 > 解决方案 > 从 Pandas 系列列表中删除元素

问题描述

我一直在从网站上寻找解决方案和提示,但找不到与我的案例直接相关的问题。

我已经从各个站点抓取了文本数据,并使用str.split('\n'). 文本包含很多 '\n' 并且以这种方式拆分使其非常可取。(如果这种方法太糟糕,请告诉我。)

df['scrape']
0       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...
1       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...
2       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...
3       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...
4       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...
5       \nWebsite:\n\n\n\nVisit\n\n \nWhite paper:\n\n...

结果是 Pandas 系列列表——所有元素都是字符串列表。

df['split'] = df['scrape'].str.split('\n')
0       [, Website:, , , , Visit, ,  , White paper:, ,...
1       [, Website:, , , , Visit, ,  , White paper:, ,...
2       [, Website:, , , , Visit, ,  , White paper:, ,...
3       [, Website:, , , , Visit, ,  , White paper:, ,...
4       [, Website:, , , , Visit, ,  , White paper:, ,...
5       [, Website:, , , , Visit, ,  , White paper:, ,...
6       [, Website:, , , , Visit, ,  , White paper:, ,...

我想摆脱每个列表上的 None 元素(''和'')。

我尝试循环:

for i in series:
    While ‘’ in i:
        i.remove(‘’)

上面的代码适用于我制作的一些任意示例,但使用我的真实数据会产生错误。

for i in df['split']:
...     while '' in i:
...         i.remove('')
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: argument of type 'float' is not iterable

我不确定为什么我的数据出现错误。可以得到一些建议吗?谢谢!

标签: pythonstringpandaslistseries

解决方案


您可以使用列表理解:

new_series = [s for s in series if s!='' and s!=' ' and s!=None]

要将列表推导应用于 Pandas 系列列表(本质上是列表列表)中的每个元素,您需要像这样嵌套列表推导:

new_series = [[s for s in element if s!='' and s!=' ' and s!=None] for element in series]

推荐阅读