Заменить значения в списке - Python - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь выполнить рефакторинг следующего кода:

labels = list(df.columns)
labels[0] = labels[0].replace(' ', '_')
labels[1] = labels[1].replace(' ', '_')
labels[2] = labels[2].replace(' ', '_')
labels[3] = labels[3].replace(' ', '_')
labels[5] = labels[5].replace(' ', '_')
labels[6] = labels[6].replace(' ', '_')
df.columns = labels

df.head()

Ниже приведен код попытки рефакторинга:

labels = list(df.columns)
n=0
for n in list(df.columns):
    labels[n].replace(' ','_')
    n = n+1

df.columns = labels
df.head()

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

TypeError                                 Traceback (most recent call last)
<ipython-input-13-63763510d35a> in <module>()
      2 n=0
      3 for n in list(df.columns):
----> 4     labels[n].replace(' ','_')
      5     n = n+1
      6 

TypeError: list indices must be integers or slices, not str

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 21 июня 2020

Вы пытаетесь смешать и сопоставить два разных типа итерации (на основе индекса и на основе значений). Вы можете сделать это намного проще, как понимание списка, перебирая значения и создавая новый список из замен: измените каждый элемент на месте так, чтобы он выглядел так:

labels = list(df.columns)
for n in range(len(labels)):
    labels[n] = labels[n].replace(' ','_')
df.columns = labels

Увеличение n не требуется, потому что for...in range уже дает вам увеличивающиеся значения n. Вам нужно было бы только управлять значением n самостоятельно, если бы вы писали while l oop:

labels = list(df.columns)
n = 0
while n < len(labels):
    labels[n] = labels[n].replace(' ','_')
    n = n + 1
df.columns = labels

Первый метод (понимание списка) - это то, что я бы порекомендовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...