Элегантный способ назначить имена заголовков фрейму данных pandas при назначении новых столбцов в цикле for?

У меня есть цикл for, который итеративно добавляет столбцы в фрейм данных pandas. Я также хочу назвать эти новые столбцы на основе списка. У меня сейчас запутанный способ, есть ли более элегантный способ сделать это?

При назначении нового столбца необходимо указать имя столбца. Однако это не может быть переменным по какой-то причине. Поэтому я использую манекен и после изменения имени столбца на основе списка, который я определил ранее. Хотя это не кажется слишком элегантным.

Столбцы фрейма данных должны быть [длина волны, слои[0]_n, слои[0]_k, ... слои[г]_n, слои[г]_k]

layers = ['Ag', 'SiO2', 'Au']    
colnames = ['wavelength']
for l in layers:
    colnames.append(l+'_n')
    colnames.append(l+'_k')

n = pd.read_csv('matdata\\' + layers[0] + '.csv')
n = n.iloc[:,0] #get only wavelength
for l in layers:
    data = pd.read_csv('matdata\\' + l + '.csv') #read appropriate file
    n = n.assign(a = data.iloc[:,1].values)
    n = n.assign(b = data.iloc[:,2].values)
    n.columns = colnames

Вам не нужно назначать с помощью assign, и если вы назначаете «простым» способом, нет проблем с использованием переменной: например, попробуйте x='a', а затем n[x]= data.iloc[:, 1].значения

Itamar Mushkin 10.04.2019 12:29

если вы хотите создать новый столбец, сохраните значения в списке и после завершения цикла for назначьте его столбцу. Но вам действительно нужно использовать цикл for? Изучите pandas методы, вы найдете лучшую альтернативу

Sociopath 10.04.2019 12:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку у меня нет доступа к вашим файлам CSV и т. д., я создаю некоторые поддельные данные для имитации этого процесса...

Начнем с нескольких DataFrames:

n = pd.DataFrame([[1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9]], 
                  columns=['x', 'y', 'z'])

dfb = pd.DataFrame([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

layers = ['Ag', 'SiO2']

for layer in layers:
    n[layer] = dfb.iloc[:, 1].values

Урожайность:

   x  y  z  Ag  SiO2
0  1  2  3   2     2
1  4  5  6   5     5
2  7  8  9   8     8

Использование этого метода вместо использования .assign() позволяет использовать имя переменной для создания заголовка столбца при создании каждого столбца.

Это действительно намного элегантнее, спасибо! Я не понимал, что вы можете ввести что-то в индекс фрейма данных, которого еще не существует. Очень удобно!

Bas de Jong 10.04.2019 17:33

Другие вопросы по теме