Недавно созданные столбцы и исполняемый код выше содержат nan
но столбцы, загруженные из csv
файла, содержат NaN
.
После запуска df['var1'].value_counts(dropna=False)
, я получаю вывод:
NaN 3453
0.0 3002
1.0 314
Name: var1, dtype: int64
После запуска df['Result1'].value_counts(dropna=False)
, я получаю вывод:
0.0 3655
nan 2665
1.0 407
Both values 42
Name: Result1, dtype: int64
Обратите внимание, что var1
содержит NaN
значений, но Result1
содержит nan
значений.
Когда я запускаю df['var1'].value_counts(dropna=False).loc[[np.nan]]
, я получаю вывод:
NaN 3453
Name: weeklyivr_q1, dtype: int64
Когда я запускаю df['Result1'].value_counts(dropna=False).loc[[np.nan]]
Я получаю сообщение об ошибке (имена переменных в ошибке разные, но ключевая идея заключается в том, что нет ошибок значения нг):
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-52-0daeac75fdb4> in <module>
27 #combined_IVR["weeklyivr_q1"].value_counts(dropna=False)
28 #combined_IVR["my_weekly_ivr_1"].value_counts(dropna=False).loc[["Both values"]]
---> 29 combined_IVR["my_weekly_ivr_1"].value_counts(dropna=False).loc[[np.nan]]
30 #combined_IVR["weeklyivr_q1"].value_counts(dropna=False).loc[[np.nan]]
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key)
1764
1765 maybe_callable = com.apply_if_callable(key, self.obj)
-> 1766 return self._getitem_axis(maybe_callable, axis=axis)
1767
1768 def _is_scalar_access(self, key: Tuple):
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis)
1950 raise ValueError("Cannot index with multidimensional key")
1951
-> 1952 return self._getitem_iterable(key, axis=axis)
1953
1954 # nested tuple slicing
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_iterable(self, key, axis)
1591 else:
1592 # A collection of keys
-> 1593 keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
1594 return self.obj._reindex_with_indexers(
1595 {axis: [keyarr, indexer]}, copy=True, allow_dups=True
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
1549
1550 self._validate_read_indexer(
-> 1551 keyarr, indexer, o._get_axis_number(axis), raise_missing=raise_missing
1552 )
1553 return keyarr, indexer
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
1636 if missing == len(indexer):
1637 axis_name = self.obj._get_axis_name(axis)
-> 1638 raise KeyError(f"None of [{key}] are in the [{axis_name}]")
1639
1640 # We (temporarily) allow for some missing keys with .loc, except in
KeyError: "None of [Float64Index([nan], dtype='float64')] are in the [index]"
Когда я бегу df['Result1'].value_counts(dropna=False).loc[['nan']]
я получаю:
nan 2665
Name: my_weekly_ivr_1, dtype: int64
Так что nan
в столбце 'Result1' является строкой.
Если я заменю choices = ["Both values", np.nan, df[col1], df[col2]]
на choices = ["Both values", pd.NA, df[col1], df[col2]]
и после запуска:
df['Result1'].value_counts(dropna=False).loc[[np.nan]]
Я получаю вывод:
NaN 2665
Name: Result1, dtype: int64
Так что в этом случае np.nan
выдает строку и pd.NA
пропущенное значение.
Вопрос:
Почему я получаю nan
в столбце «Результат1», когда используя np.nan? В чем может быть причина и как это исправить?