使用 .loc 对数据进行分类并使用 python 将数据帧迭代到 CSV 文件

Using .loc to categorize data and iterate over a dataframe using python to a CSV file

我有一个 CSV 文件,其中包含我想根据不同类别而不是颜色进行分类的项目列表。 CSV 文件是:

     ITEM  PRICE  QUANTITY CATEGORY
0  Carrot      5        10   Orange
1  Potato      3         5    brown
2   Beans      2         6      red
3   Pizza      2         7      red
4   Salad      3         1    green
5  Burger      1         4    brown
6  Carrot      0         0   orange
7  Carrot      0         0   orange
8  Potato      0         0    brown
9   Beans      0         0      red

我写的代码是:

import pandas as pd
path = 'C:\Users\[username]\.spyder-py3\TestFileCSV.csv

df = pd.read_csv(path)

if df.loc[index, 'ITEM'] == 'Carrot':
    df.loc[index, 'CATEGORY'] == 'VEGETABLE'
elif df.loc[index, 'ITEM'] == 'Beans':
    df.loc[index, 'CATEGORY'] == 'Legumes'
else:
    df.loc[index, 'CATEGORY'] == 'Check'
df.to_csv('TestFileCSV1.csv')

结果是我得到了一个新文件 TestFileCSV1,它具有与原始 TestFileCSV 完全相同的数据帧。 None 个类别是蔬菜或豆类。

谢谢!

编辑:澄清一下,我想遍历列表而不是一次分配一个类别。我要分类的实际数据集一次是数千个项目。再次感谢!

首先,您使用 == 而不是 = 进行赋值。

您可以使用它根据项目值分配类别:

df.loc[df['ITEM'] == 'Carrot', 'CATEGORY'] = 'VEGETABLE'

试试这个:

df['CATEGORY']= (df['ITEM'].apply(lambda x: 'VEGETABLE' if x=='Carrot' 
                                  else( 'Legumes' if x=='Beans' else 'Check')))

df
index ITEM PRICE QUANTITY CATEGORY
0 Carrot 5 10 VEGETABLE
1 Potato 3 5 check
2 Beans 2 6 Legumes
3 Pizza 2 7 check
4 Salad 3 1 check
5 Burger 1 4 check
6 Carrot 0 0 VEGETABLE
7 Carrot 0 0 VEGETABLE
8 Potato 0 0 check
9 Beans 0 0 Legumes

我觉得这样比较干净

# here we just map the values to the categories
def map(item):
  mapping = {'Carrot':"Vegetable",'Beans':"Legumes"}
  return map.get(item,"Check")


# apply, applies the map function to each value in x
df['CATEGORY'] = df.apply(lambda x: map(item = x['YEAR']), axis=1)