[英]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、Ynjxsjmh和BENY解决方案。 所有解决方案都为我的所有行填充 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.