#python #pandas
#python #pandas
Вопрос:
Как следует из названия, после использования ffill у меня в фрейме данных остается нулевое значение. Вот пример соответствующей части фрейма данных:
data = {'03_15_2019': {0: u'tariff rail rates for unit and shuttle train shipments1',
1: np.nan,
2: np.nan,
3: np.nan,
4: u'unit train'},
u'bushel2': {0: np.nan, 1: np.nan, 2: np.nan, 3: u' bushel2', 4: np.nan},
u'destination_region3': {0: np.nan,
1: np.nan,
2: np.nan,
3: u'Destination region3',
4: np.nan},
u'fuel_surcharge_per_car': {0: np.nan,
1: u'Fuel surcharge per car',
2: np.nan,
3: np.nan,
4: np.nan},
u'metric_ton': {0: np.nan,
1: np.nan,
2: u'Tariff plus surcharge per:',
3: u' metric ton',
4: np.nan},
u'origin_region3': {0: np.nan, 1: np.nan, 2: np.nan, 3: u'Origin region3', 4: np.nan},
u'rate_car': {0: np.nan, 1: np.nan, 2: u'Tariff', 3: u'rate/car', 4: np.nan},
u'y_y4': {0: np.nan, 1: u'Percent', 2: u'change', 3: u'Y/Y4', 4: np.nan}}
df = pd.DataFrame.from_dict(data)
Вот код, который я пытаюсь использовать:
df[df.columns[0]].ffill(inplace = True)
df[df.columns[0]] = df[df.columns[0]].str.lower()
values = df.index[df[df.columns[0]].str.contains("train")].tolist()
ошибка возвращается в третьей строке в виде:
ValueError: cannot index with vector containing NA / NaN values
когда я проверяю фрейм данных, он выдает мне это:
0 tariff rail rates for unit and shuttle train s...
1 tariff rail rates for unit and shuttle train s...
2 tariff rail rates for unit and shuttle train s...
3 NaN
4 unit train
и что делает это более странным, так это то, что если бы я перезапустил приведенный выше код в новой ячейке jupyter notebook, это сработало бы. Это не работает только при первом запуске.
Комментарии:
1. Не удается воспроизвести вашу проблему
2. Вы должны включить код, который вы использовали для создания примера фрейма данных
3. добавлен пример фрейма данных
4. Не удается воспроизвести с данным кодом
Ответ №1:
df[df.columns[0]].ffill(inplace = True)
Эта строка заменяет NaN в первом столбце. Когда вы проверяете df после этой строки, это будет не то, что вы опубликовали выше.
Ответ №2:
pandas.DataFrame.ffill
поля для прямого заполнения, означающие, что если первые элементы вашего столбца являются NaN
, они не будут заполнены (нечего распространять вперед).
Итак, в основном:
data = {'a': [1,2,None, None], 'b': [None, 2, None, 4]}
df = pd.DataFrame(data)
df.ffill()
приведет к:
a b
0 1.0 NaN
1 2.0 2.0
2 2.0 2.0
3 2.0 4.0
Возможно, вы захотите следовать ffill
с помощью fillna
, чтобы обрабатывать эти случаи по-другому