Создать серию python pandas из dict, проблема с назначением индекса

#python #pandas #series

#python #pandas #Серии

Вопрос:

Я практикую свои навыки Python и хочу создавать серии. Я хочу использовать dictionary, но когда я хочу иметь индекс для серии, он показывает мне NaN. Я не знаю, в чем причина. Начальный словарь содержит строковые значения для ключей и значений, содержит только 8 элементов.

 country_capital_dict = {'Germany':'Berlin', 'US':'Washington',
                         'Italy':'Rome', 'France':'Paris',
                         'Russia':'Moscow','Spain':'Madrid',
                         'Austria':'Vienna','Greece':'Athens'}
country_capital_series = pd.Series(country_capital_dict, index = ['a','b','c','d','e','f','g','h'])
print(country_capital_series)
 

Ответ №1:

Если передать словарь в Series ключи from, по умолчанию создается индекс:

 country_capital_dict = {'Germany':'Berlin', 'US':'Washington',
                         'Italy':'Rome', 'France':'Paris',
                         'Russia':'Moscow','Spain':'Madrid',
                         'Austria':'Vienna','Greece':'Athens'}
country_capital_series = pd.Series(country_capital_dict)
print(country_capital_series)
Germany        Berlin
US         Washington
Italy            Rome
France          Paris
Russia         Moscow
Spain          Madrid
Austria        Vienna
Greece         Athens
dtype: object
 

Если нужно изменить индекс, вы можете назначить его:

 country_capital_series.index = ['a','b','c','d','e','f','g','h']

print(country_capital_series)
a        Berlin
b    Washington
c          Rome
d         Paris
e        Moscow
f        Madrid
g        Vienna
h        Athens
dtype: object
 

Или передайте только значения словаря в Series :

 country_capital_series = pd.Series(country_capital_dict.values(), 
                                   index = ['a','b','c','d','e','f','g','h'])
print(country_capital_series)
a        Berlin
b    Washington
c          Rome
d         Paris
e        Moscow
f        Madrid
g        Vienna
h        Athens
dtype: object
 

Причиной получения всех пропущенных значений является несоответствие между индексом из списка и индексом из ключей словаря — потому что разные панды пытаются изменить исходный индекс на новый из списка и не знают новых значений, поэтому назначили все NAN:

 country_capital_series = pd.Series(country_capital_dict, 
                                   index = ['a','b','c','d','e','f','g','h'])
print(country_capital_series)
a    NaN
b    NaN
c    NaN
d    NaN
e    NaN
f    NaN
g    NaN
h    NaN
dtype: object
 

Если только некоторым совпадающим значениям присваиваются NAN только для не совпадающих значений:

 country_capital_series = pd.Series(country_capital_dict, 
                                   index = ['a','Germany','c','d','e','Austria','g','h'])
print(country_capital_series)
a             NaN
Germany    Berlin
c             NaN
d             NaN
e             NaN
Austria    Vienna
g             NaN
h             NaN
dtype: object
 

Ответ №2:

Спасибо, это сработало.

Кроме того, я создал фрейм данных и изменил индекс, следуя вашему предложению. И это тоже было нормально. cars_details = {‘Honda’:[‘Civic’,’Accord’,’Acura’,’Pilot’,’Odyssey’,’Fit’, ‘Ringline’, ‘Гражданский хэтчбек’,’HR-V’], ‘Год’:[‘2005′,’2012′,’2018′,’2020′,’2013′,’2019′,’2020′,’2019’, ‘2014’] , ‘ Пробег’: [98600,55000,16000,126000,150000,17000,500,10000,110000], ‘Цена’: [6500,12300,15500,18000,77000,16600,34000,19000,12000], ‘Категория’: [‘седан’, ‘седан’,’седан’, ‘внедорожник’, ‘минивэн’, ‘хэтчбек’, ‘грузовик’, ‘хэтчбек’, ‘внедорожник’]

              }
 

df_cars_details = pd.DataFrame(cars_details)

индекс от 0 до 9 равен

df_cars_details.index = [‘1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’] print(‘df_cars_details с новыми индексами’) print(df_cars_details)

индекс от 1 до 9

У меня нет какой-либо конкретной цели изменить индекс, просто положил руки на Pandas для практики. Но я ценю ваш совет. Это полезно.