Почему pandas df.add_suffix () не работает с циклом for - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь использовать pandas df.add_suffix() для нескольких фреймов данных, которые хранятся в списке через for-l oop:

df_1 = pd.DataFrame({'X': [2, 3, 4, 5],  'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9],  'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13],  'Y': [7, 0, 1, 4]})

mylist = [df_1, df_2, df_3]

for i in mylist:
    i = i.add_suffix('_test')

Однако, когда я печатаю фреймы данных впоследствии, я все еще вижу старые имена столбцов «X» и «Y».

При выполнении одной и той же операции на каждом из фреймов данных отдельно:

df1 = df_1.add_suffix('_test')

все работает, как ожидалось, и я получаю имена столбцов "X_test" и "Y_test".

У кого-нибудь есть идеи, чего мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 27 марта 2020
df_1 = pd.DataFrame({'X': [2, 3, 4, 5],  'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9],  'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13],  'Y': [7, 0, 1, 4]})

mylist = [df_1, df_2, df_3]

for i,j in enumerate(mylist):
    mylist[i] = j.add_suffix('_test')

Обновленные dfs находятся в списке (mylist), а не в исходном.

0 голосов
/ 27 марта 2020

вы меняете значение переменной i, но i это не то же самое с элементами mylist, когда вы выполняете итерацию с использованием for l oop, который вы присваиваете переменной i последовательные элементы из mylist, вы должны использовать индекс списка для изменения элементов:

for i in range(len(mylist)):
    mylist[i] = mylits[i].add_suffix('_test')
0 голосов
/ 27 марта 2020

Проблема в том, что вывод не назначен обратно в список, поэтому без изменений.

Решение, если хотите назначить тот же список из DataFrame s с enumerate для индексации:

for j,i in enumerate(mylist):
    mylist[j] = i.add_suffix('_test')

print (mylist)
[   X_test  Y_test
0       2       4
1       3       5
2       4       6
3       5       7,    X_test  Y_test
0       6       9
1       7       8
2       8       7
3       9       6,    X_test  Y_test
0       6       7
1       3       0
2       1       1
3      13       4]

Или, если вы хотите новый список DataFrame с использованием списка понимания:

dfs = [i.add_suffix('_test') for i in mylist]

print (dfs)
[   X_test  Y_test
0       2       4
1       3       5
2       4       6
3       5       7,    X_test  Y_test
0       6       9
1       7       8
2       8       7
3       9       6,    X_test  Y_test
0       6       7
1       3       0
2       1       1
3      13       4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...