Переименование имен столбцов из набора данных в pandas

#python #pandas #rename

#питон #панды #переименовать

Вопрос:

Я пытаюсь переименовать имена столбцов из фрейма данных, в имени которых есть пробел. Фрейм данных (df) состоит из 45 столбцов, и большинство из них имеют пробелы в имени. Например: df.column.values [1] = 'Date Release' , и имя должно быть изменено на 'Date_Release' . Я пытался DataFrame.rename () , DataFrame.columns.values[] но у меня ничего не получилось. Я был бы очень признателен, если бы вы помогли мне выяснить, что я сделал не так

 for colmns in df:
    if ' ' in colmns:
        colmns_new = '_'.join(colmns.split())
        df = df.rename (columns = {""%s"" %colmns : ""%s"" %colmns_new})   
    else:
        print (colmns)    

print (df)
 

или вот этот:

 for i in range (len(df.columns)):
    old= df.columns.values[i]
    if ' ' in old:
        new = '_'.join(old.split())
        df = df.columns.values[i] = ['%s' % new]
        print (""%s"" % new) 
print (df)
 

Ошибка: ошибка атрибута: объект ‘list’ не имеет атрибута ‘columns’

Комментарии:

1. Вы можете просто указать df.columns.str.replace(' ','_') , и он заменит столбцы, в которых есть пробел, символом подчеркивания

Ответ №1:

 import pandas as pd
df.columns = [i.replace(' ','_') for i in df.columns]
 

Комментарии:

1. Большое спасибо. Не будучи опытным программистом, я два дня пытался найти решение.

Ответ №2:

Вы можете использовать регулярное выражение для замены пробелов символом подчеркивания

Вот пример df с некоторыми столбцами, содержащими пробелы,

 cols = ['col {}'.format(i) for i in range(1, 10, 1)]   ['col10']
df = pd.DataFrame(columns = cols)

import re
df.columns = [re.sub(' ','_',i) for i in df.columns]
 

Вы получаете

 col_1   col_2   col_3   col_4   col_5   col_6   col_7   col_8   col_9   col10
 

Ответ №3:

Вы можете просто указать df.columns = df.columns.str.replace(' ','_') , чтобы заменить пробел символом подчеркивания.

Вот пример. Здесь в столбце a1 нет пробела. Однако столбцы b 2 и c 3 имеют пробел.

 >>> df = pd.DataFrame({'a1': range(1,5), 'b 2': list ('abcd'), 'c 3':list('pqrs')})
>>> df
   a1 b 2 c 3
0   1   a   p
1   2   b   q
2   3   c   r
3   4   d   s
>>> df.columns = df.columns.str.replace(' ','_')
>>> df
   a1 b_2 c_3
0   1   a   p
1   2   b   q
2   3   c   r
3   4   d   s