#python #pandas
#python #pandas
Вопрос:
У меня есть цикл for, который итеративно добавляет столбцы в фрейм данных pandas. Я также хочу назвать эти новые столбцы на основе списка. Теперь у меня есть запутанный способ, есть ли более элегантный способ сделать это?
При назначении нового столбца необходимо указать имя столбца. Однако по какой-то причине это не может быть переменной. Поэтому я использую фиктивный файл и после изменения имени столбца на основе списка, который я определил ранее. Хотя это не кажется слишком элегантным.
Столбцы фрейма данных должны быть [длина волны, слои [0] _n, слои [0] _k, … слои [z] _n, слои [z] _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
Комментарии:
1. Вам не нужно назначать using
assign
, и если вы назначаете «простым» способом, нет проблем с использованием переменной: например, попробуйте x=’a’ , за которым следует n[x]= data.iloc[:,1].значения2. если вы хотите создать новый столбец, сохраните значения в списке и после завершения
for
цикла присвоите его столбцу. Но вам действительно нужно использоватьfor
цикл? Изучитеpandas
методы, которые вы найдете лучшей альтернативой
Ответ №1:
Поскольку у меня нет доступа к вашим CSV и т. Д., Я создаю некоторые поддельные данные для имитации этого процесса…
Давайте начнем с нескольких фреймов данных:
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()
позволяет использовать имя переменной для создания заголовка столбца при создании каждого столбца.
Комментарии:
1. Это действительно намного элегантнее, спасибо! Я не понимал, что вы можете ввести что-то в индекс фрейма данных, который еще не существует. Очень удобно!