如何在Python中从列表中删除 ' '?

5

我有一个包含列表的df列。每个列表看起来像[1,2,3,4,'',6,7],[2,3,'',5,6]。我想删除每一行中的 ''。我使用了:

df[column].apply(lambda x: x.remove(''))

但是它没有起作用。有人可以帮我吗?谢谢。

ValueError: list.remove(x): x not in list
4个回答

2
做一个显式的过滤器: filter(lambda x: x != "", your_list) 或使用列表推导式:[x for x in your_list if x != ""]。它们的作用相同,只是个人偏好的问题。
不要使用布尔方法进行过滤,因为这样会意外地删除0,因为在Python中它们是“假值”。

2
如果您有一个列表,您可以使用筛选器来过滤掉您不想要的元素,如下所示 -
my_list = [1,2,3,4,'',6,7]
my_list = list(filter(lambda x : x!='',my_list))
print(my_list)

输出:

[1, 2, 3, 4, 6, 7]

使用map函数也可以轻松地扩展为二维列表。我们将基本上对二维列表的每个元素应用第一个函数,具体如下 -

my_list = [[1,2,3,4,'',6,7],[2,3,'',5,6]]
my_list = list(map(lambda sub_list:list(filter(lambda x : x!='',sub_list)),my_list))
print(my_list)

输出:

[[1, 2, 3, 4, 6, 7], [2, 3, 5, 6]]

1
针对您的特定问题,您可以将其放在try块中, 当它遇到没有""作为元素的列表时,会抛出错误,您可以
for i, row in df.iterrows():
     row['column'] = list(filter(lambda x: x != "", row['column']))
   

如果您只想从列表中删除引号,可以尝试:
new_list= [s for s in your_list if s != ""]

或者

new_list = list(filter(lambda x: x != "", your_list))

也可以运行。

1
文档明确指出,在使用iterrows时不要修改数据框。 - Vishesh Mangla
但适用于小型数据集,不知道th0,谢谢提供信息。 - Shashank Prasad
没问题,我在回答完这里的问题后也看到了它。 - Vishesh Mangla
使用.map.apply替换将使其成为最佳选项,我认为。 - user128029

1
我不知道您是如何出现错误的。如果您的列只有两个元素如上所述,它应该可以像下面展示的那样工作。
import pandas as pd
df = pd.DataFrame({'column':[[1,2,3,4,'',6,7],[2,3,'',5,6]]})
df['column'].apply(lambda x:x.remove(''))
print(df)

输出

               column
0  [1, 2, 3, 4, 6, 7]
1        [2, 3, 5, 6]

可能出现问题的原因是您可能有一个元素没有 '',例如 [2,3,5,6],因此在这种情况下可能会发生此错误。因此,只需重新创建错误,我们就可以看到相同的错误发生。
import pandas as pd
df = pd.DataFrame({'column':[[1,2,3,4,'',6,7],[2,3,'',5,6],[2,3,5,6]]})
df['column'].apply(lambda x:x.remove(''))
print(df)

错误输出
Traceback (most recent call last):
  File "C:/Users/Deva/PycharmProjects/IITJ/ML/MLf3/extras/adaf.py", line 3, in <module>
    df['column'].apply(lambda x:x.remove(''))
  File "C:\Users\Deva\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\series.py", line 3848, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)
  File "pandas\_libs\lib.pyx", line 2329, in pandas._libs.lib.map_infer
  File "C:/Users/Deva/PycharmProjects/IITJ/ML/MLf3/extras/adaf.py", line 3, in <lambda>
    df['column'].apply(lambda x:x.remove(''))
ValueError: list.remove(x): x not in list

以上情况的解决方案

为了避免这种情况,只需引入try except即可。

import pandas as pd
df = pd.DataFrame({'column':[[1,2,3,4,'',6,7],[2,3,'',5,6],[2,3,5,6]]})
try:
    df['column'].apply(lambda x:x.remove(''))
except:
    pass
print(df)

输出

               column
0  [1, 2, 3, 4, 6, 7]
1        [2, 3, 5, 6]
2        [2, 3, 5, 6]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接