Pandas 在python的csv文件中仅选择有限列
我有一个项目编号清单如下Pandas 在python的csv文件中仅选择有限列,pandas,Pandas,我有一个项目编号清单如下 item_numbers = [1,2,5] 我还有一个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,我不需要该成分) 是否可以使用pandas执行此操作?您可以首先选择行,然后使用NaNby删除可能添加的行,并与0by进行比较。最后使用列表应用
item_numbers = [1,2,5]
我还有一个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,我不需要该成分)
是否可以使用pandas执行此操作?您可以首先选择行,然后使用
NaN
by删除可能添加的行,并与0
by进行比较。最后使用列表应用:
df = df.loc[item_numbers].dropna(how='all').gt(0).apply(lambda x: x.index[x].tolist(), 1)
print (df)
1 [salt, oil]
2 [sugar]
dtype: object
如果要将值与,
合并:
df = df.loc[item_numbers].dropna(how='all').gt(0)
s = np.where(df, ['{}, '.format(x) for x in df.columns], '')
out = pd.Series([''.join(x).strip(', ') for x in s], index=df.index)
print (out)
1 salt, oil
2 sugar
dtype: object
因此,对于每一行,您需要一个列名称列表,其中值>0?您想对输出做什么?将它另存为一个新列?我认为最简单的方法是使用out=pd.DataFrame({'col':[''.join(x).strip('',')for x in s]},index=df.index)
然后out.to_csv('myfile.csv',index=False)
如果需要,还可以使用第一列out.to_csv('myfile.csv')
谢谢您的回答。但是,我得到了以下错误。请让我知道如何纠正它。TypeError:无法在“numpy.ndarray”和“int”实例之间使用不支持的块值“>”操作0。我认为问题在于您的数据不是浮动的,而是str
。在我的解决方案之前,请使用df=df.iloc[:,1:
来忽略第一列。
df = df.loc[item_numbers].dropna(how='all').gt(0)
s = np.where(df, ['{}, '.format(x) for x in df.columns], '')
out = pd.Series([''.join(x).strip(', ') for x in s], index=df.index)
print (out)
1 salt, oil
2 sugar
dtype: object
print (df.dtypes)
sugar float64
protein float64
salt float64
oil float64
dtype: object