Pandas dataframe печатает дополнительную информацию - PullRequest
1 голос
/ 19 марта 2019

smer_prods - это словарь, который выглядит следующим образом:

smer_prods = {
    #'vermicelli' : ['vermicelli', 'ragi vermicelli', 'rice vermicelli'],
    'ragi vermicelli' : ['ragi vermicelli'],
    'rice vermicelli' : ['rice vermicelli'],
    'vermicelli jupiter' : ['vermicelli jupiter'],
    'lemon & tamarind vermicelli' : ['lemon & tamarind vermicelli'],
    'finosta vermicelli' : ['finosta vermicelli-5kg'],
    'rosted vermicelli' : ['roasted vermicelli'],
    'semiya/vermicelli' : ['semiya / vermicelli 900grams'],
    'vermicelli upma' : ['vermicelli upma'],
    'vermicelli payasam mix' : ['vermicelli payasam mix'],
    'mung bean vermicelli' : ['mung bean vermicelli'],
    'red chili' : ['red chilli (lal mirch)','guntur red chilli','red chilly whole(lal mirch)', 'red chilly wg', 'red chilli whole (hot) 1 kg', 'red chilli whole (rich colour) 1 kg'],
    'red chili powder' : ['red chilli fresh-kg','red chilli powder (rich colour) 1 kg','red chilli powder (hot) 1 kg','red chilli powder','lal mirch powder','lal mirch powder 100gms', 'lal mirch powder 1kg', 'lal mirch powder 200gms', 'lal mirch powder 500gms'],
    'red chilli sauce' : ['red chilli sauce', 'red chilli sauce 200gm pet bottle 48X200gm', 'hot chili sauce'],
    'sriraja hot chilli sauce' : ['sriraja hot chilli sauce', 'sriracha hot chilli sauce'],
    'mineral water' : ['himalayan orchard pure peach flavoured natural mineral water - 500 ml','himalayan orchard pure strawberry flavoured natural mineral water - 500 ml','himalayan orchard pure apple flavoured natural mineral water - 500 ml','himalayan - the natural mineral water - 500ml bottle', 'himalayan - the natural mineral water - 200ml bottle', 'himalayan - the natural mineral water - 1ltr bottle'],
}

CSV для фрейма данных df выглядит так: enter image description here

Теперь, когда я выполняю это простоекод:

for x in smer_prods:
    mask = df['ITEM NAME'] == x
    df1 = df[mask]
    print(df1['ITEM NAME'])

Он должен печатать только столбец ITEM_NAME, но выводит много лишней дополнительной информации:

4    rice vermicelli
Name: ITEM NAME, dtype: object
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
5    ragi vermicelli
Name: ITEM NAME, dtype: object
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)
1    sriraja hot chilli sauce
Name: ITEM NAME, dtype: object
Series([], Name: ITEM NAME, dtype: object)
Series([], Name: ITEM NAME, dtype: object)

Я хочу, чтобы в списке были только совпадающие элементы.Для которого я написал код:

for x in smer_prods:
    mask = df['ITEM NAME'] == x
    df1 = df[mask]
    item_name = df1['ITEM NAME'].tolist()
    print(item_name)

Он дал такой вывод: ['Rice Vermicelli']

[]
[]
['ragi vermicelli']
[]
[]
[]
[]
[]
[]
[]
[]
['sriraja hot chilli sauce']
[]
[]

Желаемый вывод:

['rice vermicelli', 'ragi vermicelli', 'sriraja hot chili sauce']

Изменить: Если я напишу это:

match = []
for x in smer_prods:
    mask = df['ITEM NAME'] == x
    if mask.any() == True:
        df1 = df[mask]

        item_name = df1['ITEM NAME']#note
        match.append(item_name)
print(match)
print('-'*80)

Это выводит:

[4    rice vermicelli
Name: ITEM NAME, dtype: object, 5    ragi vermicelli
Name: ITEM NAME, dtype: object, 1    sriraja hot chilli sauce
Name: ITEM NAME, dtype: object]

1 Ответ

1 голос
/ 19 марта 2019

Я думаю, вам нужны тестовые значения в списках, поэтому используйте понимание списка с isin для тестовых значений словаря:

df = pd.DataFrame({'ITEM NAME':['ragi vermicelli','red chilli (lal mirch)']})
print (df)
                ITEM NAME
0         ragi vermicelli
1  red chilli (lal mirch)

#if need matched values
L = [y for k, v in smer_prods.items() 
       for y in df.loc[df['ITEM NAME'].isin(v), 'ITEM NAME'].tolist()]
print (L)
['ragi vermicelli', 'red chilli (lal mirch)']

#if need matched key of dictionary
L1 = [k for k, v in smer_prods.items() 
        for y in df.loc[df['ITEM NAME'].isin(v), 'ITEM NAME'].tolist()]
print (L1)
['ragi vermicelli', 'red chili']

Петлевое решение:

L = []
for k, v in smer_prods.items():
    for y in df.loc[df['ITEM NAME'].isin(v), 'ITEM NAME'].tolist():
        print (y)
        L.extend([y])
        #if need matched key of dictionary
        #L.extend([k])

print (L)
['ragi vermicelli', 'red chilli (lal mirch)']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...