繁体   English   中英

如何删除熊猫中的空列表?

[英]How to remove empty list in pandas?

我正在从 csv 中读取数据我有一个这样的数据框:

product_title   variatons_color          
T-shirt          ['yellow','ornage'] 
T-shirt          []
T-shirt          ['blue','green']

我预期的数据框将如下所示

product_title   variatons_color          
T-shirt          ['yellow','ornage'] 
T-shirt         
T-shirt          ['blue','green']

我想删除空列表。 如何在熊猫中做到这一点?

update1我应用了 Scott Boston、YnjxsjmhBENY解决方案。 所有解决方案都为我的所有行填充 None 值,但我只需要为我的空列表填充 None 值。 当我运行type(df.loc[0,'variations_color'])返回str

你可以试试

df['variatons_color'] = df['variatons_color'].apply(lambda lst: lst if len(lst) else '')
print(df)

  product_title   variatons_color
0       T-shirt  [yellow, ornage]
1       T-shirt
2       T-shirt     [blue, green]

使用布尔检查检查分配

df.loc[~df['variatons_color'].astype(bool),'variatons_color'] = ''

更新

df.loc[df['variatons_color'].eq('[]'),'variatons_color'] = ''

只需apply len

df.loc[df['variations_color'].apply(len) == 0, 'variations_color'] = ''

或者

df.loc[df['variations_color'].apply(len) == 0, 'variations_color'] =  np.nan

输出:

  product_title  variations_color
0       T-shirt  [yellow, orange]
1       T-shirt               NaN
2       T-shirt     [blue, green]

给定df,

df = pd.DataFrame({'product_title':['T-shirt']*3,
                   'variations_color':[['yellow', 'orange'],[],['blue', 'green']]})

但是,如果您的 datafame 结构是这样的:

df = pd.DataFrame({'product_title':['T-shirt']*3,
                   'variations_color':['[yellow, orange]','[]','[blue, green]']})

然后,您可以使用以下内容:

df.loc[df['variations_color'] == '[]', 'variations_color'] = np.nan

输出:

  product_title  variations_color
0       T-shirt  [yellow, orange]
1       T-shirt               NaN
2       T-shirt     [blue, green]

注意第一个例子的区别

type(df.loc[0,'variations_color'])返回一个列表

并且,第二个返回 str。 数据框的字符串表示是相同的,因此您无法仅在打印时查看它来判断。 在 python 中,了解您正在使用的对象的类型(数据类型)总是很重要的。

import pandas as pd
df = pd.DataFrame({'product_title':['T-shirt']*3,
                   'variations_color':[['yellow', 'orange'],[],['blue', 'green']]})
df['variations_color'] = df['variations_color'].apply(lambda x: None if any(eval(str(x))) == False else x)
df

看这里!

import pandas as pd
from io import StringIO

data = '''
product_title   variatons_color          
T-shirt          ['yellow','ornage'] 
T-shirt          []
T-shirt          ['blue','green']
'''

df = pd.read_csv(StringIO(data), delim_whitespace=True)
df.variatons_color = df.variatons_color.apply(eval)
df
'''
  product_title   variatons_color
0       T-shirt  [yellow, ornage]
1       T-shirt                []
2       T-shirt     [blue, green]
'''



type(df.iat[0, 1])
# list


df.mask(df.applymap(len) == 0, None)
'''
  product_title   variatons_color
0       T-shirt  [yellow, ornage]
1       T-shirt              None
2       T-shirt     [blue, green]
'''

完毕!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM