我有一个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
答案 0 :(得分:0)
由于我无权访问您的CSV等,因此我正在创建一些虚假数据来模拟此过程...
让我们从几个DataFrame开始:
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()
允许在创建每个列时使用变量名来创建列标题。