Фрейм данных: pandas 'работает в одном случае, но показывает ошибку в другом - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть следующий код, который анализирует последние данные COVID19 и находит кумулятивно подтвержденные случаи для выбранных стран, что прекрасно работает.

import pandas as pd
import matplotlib.pyplot as plt

url="https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
df=pd.read_csv(url)

print(df.head())

print('Dropping province, latitude and longitude')
df = df.drop(['Province/State', 'Lat', 'Long'], axis = 1)
print(df.head())

print('Selecting the countries of interest')
countries=['Italy','Netherlands']
s1=df.loc[df['Country/Region'].isin(countries)]    
print('s1=\n',s1.head())

print('Summing all provinces for the same country')
df_gr = s1.groupby('Country/Region').sum()#.reset_index() 
print(df_gr.head())

В конце вышесказанное дает мне в конце:

Summing all provinces for the same country
                1/22/20  1/23/20  1/24/20  1/25/20  1/26/20  1/27/20  1/28/20  1/29/20  1/30/20  ...  3/26/20  3/27/20  3/28/20  3/29/20  3/30/20  3/31/20  4/1/20  4/2/20  4/3/20
Country/Region                                                                                   ...
Italy                 0        0        0        0        0        0        0        0        0  ...    80589    86498    92472    97689   101739   105792  110574  115242  119827
Netherlands           0        0        0        0        0        0        0        0        0  ...     7468     8647     9819    10930    11817    12667   13696   14788   15821

Теперь я сначала groupby, а затем isin, чтобы выбрать данные двух стран и рассчитываю получить тот же результат:

import pandas as pd
import matplotlib.pyplot as plt

url="https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
df=pd.read_csv(url)

print(df.head())

print('Dropping province, latitude and longitude')
df = df.drop(['Province/State', 'Lat', 'Long'], axis = 1)
print(df.head())


print('Summing all provinces for the same country')
df_gr = df.groupby('Country/Region').sum()#.reset_index() 
print(df.head())

print('Selecting the countries of interest')
countries=['Italy','Netherlands']
s1=df_gr.loc[df_gr['Country/Region'].isin(countries)]
print('s1=\n',s1.head())

Однако я получаю следующую ошибку:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2646, in get_loc
    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Country/Region'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dr2.py", line 27, in <module>
    s1=df_gr.loc[df_gr['Country/Region'].isin(countries)]
  File "/usr/local/lib/python3.7/site-packages/pandas/core/frame.py", line 2800, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2648, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Country/Region'

Любое объяснение или средство правовой защиты?

1 Ответ

1 голос
/ 05 апреля 2020

Ваш код выглядит правильно. После вставки, без изменений, он работал правильно, под pandas 1.0.3.

Я рекомендую обновить до следующих версий пакета:

# Name                    Version                   Build  Channel
numpy                     1.17.3           py37hde6bac1_0    conda-forge
pandas                    1.0.3            py37h94625e5_0    conda-forge

Если у вас еще нет conda управление версиями пакетов для вас, доступно от https://conda.io/en/latest/miniconda.html

...