В настоящее время я изучаю и работаю с pandas DataFrame, и мне пришлось решить проблему, когда мне нужно заполнить значения NaN режимом с соответствующими сериями, это работает, но я не могу понять, что такое [0] в конце для . Также возможно ли выполнить то же самое для всего DataFrame за один раз?
df['col1'] = df['col1'].fillna(df['col1'].mode()[0])
import pandas as pd
import numpy as np
data = {'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills', 'Cranes'],
'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4, 3.5], 'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2, 2],
'priority': ['yes', 'yes', 'no', np.nan, 'no', 'no', 'no', 'yes', 'no', 'no','yes']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
df = pd.DataFrame(data)
df.rename(index = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e', 5:'f', 6:'g', 7:'h', 8:'i', 9:'j', 10:'k'})
df.iloc[::2]
**df['age'] = df['age'].fillna(df['age'].mode()[0])
df**






mode() возвращает серию (тип pandas DataFrame), а не одно значение. Это связано с тем, что технически в наборе данных может быть несколько режимов. Индексируя с помощью [0], вы выбираете первый режим в наборе данных.
Кроме того, для этого для всего набора данных вы можете использовать:
df = df.apply(lambda x: x.fillna(x.mode()[0]) if x.dtype.name == 'object' else x)
Согласно документации , вызываемый вами метод mode() возвращает объект DataFrame. Этот объект описан здесь, где он описан как «Двумерные, изменяемые по размеру, потенциально гетерогенные табличные данные». Это означает, что вы можете получить доступ к его наборам данных через индекс. Вызов метода df['col1'].mode()[0] вызывает метод mode() в вашем Dataframe df, а затем берет с собой первую запись через [0].