我有一个项目编号列表如下。
item_numbers = [1,2,5]
我还有一个包含item_numbers成分的csv文件。
,sugar, protein, salt, oil
0, 0.2, 0.3, 0, 0
1, 0, 0, 0.2, 0.8
2, 0.4, 0, 0, 0
现在,我想获取列表中值大于零的项目的成分(如果值== 0,我不需要该成分)
E.g., item 1 in 'item_numbers' list -> [{'salt': 0.2}, {'oil': 0.8}]
我目前的代码如下。
df = pd.read_csv(ingredients, sep = ',')
df = df.iloc[:,1:]
df = df.loc[item_numbers].dropna(how='all').gt(0).apply(lambda x: x.index[x].tolist(), 1)
ingredients = df.values.tolist()
print(ingredients)
请帮帮我。
答案 0 :(得分:1)
您可以使用:
df = df.loc[item_numbers].dropna(how='all').apply(lambda x: x[x > 0].to_dict(), 1)
ingredients = df.values.tolist()
print(ingredients)
[{'oil': 0.80000000000000004, 'salt': 0.20000000000000001}, {'sugar': 0.40000000000000002}]
要删除float precision numbers,可以使用:
str
:df = df.loc[item_numbers].dropna(how='all').apply(lambda x:x[x > 0].astype(str).to_dict(), 1)
ingredients = df.values.tolist()
print(ingredients)
[{'oil': '0.8', 'salt': '0.2'}, {'sugar': '0.4'}]
10
,100
然后再划分:df = df.loc[item_numbers].dropna(how='all').mul(10).apply(lambda x: x[x > 0].to_dict(), 1)
ingredients = df.values.tolist()
print(ingredients)
[{'oil': 8.0, 'salt': 2.0}, {'sugar': 4.0}]