Data Frame - изменение вложенной переменной - PullRequest
0 голосов
/ 29 мая 2020

Мы обсуждаем данные, которые импортированы из Excel

ene2 = pd.read_excel('Energy Indicators.xls', index=False) 

недавно я спросил в сообщении, где ответы были четкими, простыми и принесли успех.

Изменение значений элементов in Pandas Datastructure

Однако я пошел дальше, и у меня есть аналогичная (si c!) проблема, когда присвоение переменной ничего не меняет.

Давайте рассмотрим данные Структура

print(ene2.head())
               Country Energy Supply Energy Supply per Capita % Renewable's
    15             NaN    Gigajoules               Gigajoules             %
    16     Afghanistan     321000000                       10       78.6693
    17         Albania     102000000                       35           100
    18        Algeria1    1959000000                       51       0.55101
    19  American Samoa           ...                      ...      0.641026

238                            Viet Nam    2554000000                       28       45.3215
239           Wallis and Futuna Islands             0                       26             0
240                               Yemen     344000000                       13             0
241                              Zambia     400000000                       26       99.7147
242                            Zimbabwe     480000000                       32       52.5361
243                                 NaN           NaN                      NaN           NaN
244                                 NaN           NaN                      NaN           NaN

где некоторые страны имеют индекс (например, Algieria1 или Australia12). Я хочу изменить эти имена, чтобы они стали только Algieria, Australia и т. Д.

Всего есть 20 записей, которые предполагается изменить. Я разработал метод для этого, который на последнем этапе терпит неудачу ..

for value in ene2['Country']:
    if type(value) == float: # to cover NaN values
        continue

    x = re.findall("\D+\d", value) # to find those countries/elements which are with number

    while len(x) > 0: # this shows elements with number, otherwise answer is [], which is 0
        for letters in x: # to touch letters
            right = letters[:-1] # and get rid of the last number
            ene2.loc[ene2['Country'] == value, 'Country'] = right # THIS IS ELEMENT WHICH FAILS <= it does not chagne the value
        x = re.findall("\D+\d", value) # to bring the new value to the while loop

Код выше должен решить задачу, окончательно удалить все индексы из имен, но код - ene2.loc [ ...], который раньше работал, здесь, где вложено, просто ничего не делайте.

Что может быть, если этот обмен не работает, как я могу решить проблему а) в старом стиле способ б) Путь Панды?

1 Ответ

1 голос
/ 29 мая 2020

Код предполагает, что вы уже используете pandas, так почему бы не использовать встроенный метод замены с регулярным выражением?

df = pd.DataFrame(data=["Afghanistan","Albania", "Algeria1", "Algeria9999"], columns=["Country"])
df["Country_clean"] = df["Country"].str.replace(r'\d+$', '')

вывод:

print(df["Country_clean"])

0    Afghanistan
1        Albania
2        Algeria
3        Algeria
Name: Country, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...