Работа с отсутствующими данными
В этом разделе мы обсудим отсутствующие (также обозначаемые как NA) значения в pandas.
Примечание
Выбор использования NaN для обозначения отсутствующих данных в основном обусловлен простотой и производительностью. Это отличается от подхода MaskedArray, например, scikits.timeseries. Мы надеемся, что NumPy вскоре сможет предоставить решение с родным типом NA (аналогичное R), достаточно эффективное для использования в pandas.
См. справочник для некоторых продвинутых стратегий.
Основы работы с отсутствующими данными
Когда/почему данные могут отсутствовать?
Некоторые могут поспорить о нашем использовании термина «отсутствующий». Под «отсутствующим» мы просто подразумеваем NA («недоступно») или «не присутствует по какой-либо причине». Многие наборы данных изначально содержат отсутствующие данные, либо потому, что они существовали, но не были собраны, либо потому, что они никогда не существовали. Например, в коллекции финансовых временных рядов некоторые временные ряды могут начинаться в разные даты. Таким образом, значения до даты начала обычно отмечаются как отсутствующие.
В pandas одним из наиболее распространенных способов введения отсутствующих данных в набор данных является переиндексация. Например:
In [1]: df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],
...: columns=['one', 'two', 'three'])
...:
In [2]: df['four'] = 'bar'
In [3]: df['five'] = df['one'] > 0
In [4]: df
Out[4]:
one two three four five
a -0.166778 0.501113 -0.355322 bar False
c -0.337890 0.580967 0.983801 bar False
e 0.057802 0.761948 -0.712964 bar True
f -0.443160 -0.974602 1.047704 bar False
h -0.717852 -1.053898 -0.019369 bar False
In [5]: df2 = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
In [6]: df2
Out[6]:
one two three four five
a -0.166778 0.501113 -0.355322 bar False
b NaN NaN NaN NaN NaN
c -0.337890 0.580967 0.983801 bar False
d NaN NaN NaN NaN NaN
e 0.057802 0.761948 -0.712964 bar True
f -0.443160 -0.974602 1.047704 bar False
g NaN NaN NaN NaN NaN
h -0.717852 -1.053898 -0.019369 bar False
Значения, рассматриваемые как «отсутствующие»
Поскольку данные могут иметь различные формы, pandas стремится к гибкости в обработке отсутствующих данных. Хотя NaN является значением по умолчанию для обозначения отсутствующих данных по соображениям вычислительной скорости и удобства, нам необходимо иметь возможность легко определять это значение с данными разных типов: с плавающей точкой, целыми числами, булевыми значениями и общими объектами. Однако во многих случаях возникает Python None, и мы также хотим рассматривать его как «отсутствующий» или «недоступный», или «NA».
Примечание
Если вы хотите рассматривать inf и -inf как «NA» при вычислениях, вы можете установить pandas.options.mode.use_inf_as_na = True.
Для упрощения обнаружения отсутствующих значений (и для различных типов массивов) pandas предоставляет функции isna() и notna(), которые также являются методами объектов Series и DataFrame:
In [7]: df2['one'] Out[7]: a -0.166778 b NaN c -0.337890 d NaN e 0.057802 f -0.443160 g NaN h -0.717852 Name: one, dtype: float64 In [8]: pd.isna(df2['one'])
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.23.4/missing_data.html