Как напечатать имя столбца в строке Pandas DataFrame?

1

У меня этот DataFrame:

 df = pd.DataFrame({'day':['1/1/2017','1/2/2017','1/3/2017','1/4/2017','1/5/2017','1/6/2017','1/7/2017'],
                     'event':['Rain','Sunny','Snow','Snow','Rain','Sunny','Sunny'],
                   'temperature': [32, 35, 28,24,32,31,''],'windspeed':[6,7,2,7,4,2,'']})
 df

Изображение 174551

Я пытаюсь найти заголовки для недостающих значений в индексе 6:

for x in df.loc[6]:
if x == '':
    print(df.columns.values)
else: print(x)

Изображение 174551

Я попробовал поиск, и самое близкое, что я мог получить, было тем, что у меня есть сейчас. В конечном итоге я пытаюсь вставить эти значения в dataframe: temperature = 34, windspeed = 8.

Но мой первый шаг был просто попыткой построить оператор loop/if, который говорит, что если x == '' & [COLUMN_NAME] == 'temperature'... и вот где я застрял. Я новичок в python, просто пытаясь узнать Pandas. Мне нужно только вернуть столбец, в котором я включен, а не список всех столбцов.

Теги:
pandas
dataframe

3 ответа

2
Лучший ответ

Есть лучшие способы сделать это, но это работает.

for col, val in df.loc[6].iteritems():
    if not val: # this is the same as saying "if val == '':"
        print(col)
    else:
        print(val)
  • 0
    Я попробовал это с помощью iterrows (), но ничего не вышло. Не думал об использовании iteritems (). Работает отлично! И да, я понимаю, что есть гораздо лучшие способы для достижения того, что мне нужно сделать, это больше просто изучение различных способов нарезки и нарезки кубиков данных. :)
1

Я бы воспользовался списком:

listOfNulls = [ind  for ind in df.loc[6].index if df.loc[6][ind] == '']

и когда я печатаю listOfNulls, я получаю:

>>>> print(listOfNulls)
Out: ['temperature', 'windspeed']

Ключевым моментом здесь является понимание того, что df.loc [6] - Series панд, имеющая индексы. Мы используем значения Series для получения индексов.

1

Изменено из вашего кода:

for i,x in enumerate(df.loc[6]):
    if x == '':
        print(df.columns[i])
    else: print(x)
  • 2
    Я хотел бы выбрать 2 ответа. Наличие обоих этих ответов на самом деле помогает мне увидеть множество способов достижения этой же цели. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню