我有一个 for 循环,它以迭代方式向 Pandas 数据框添加列。我还希望根据列表命名这些新列。我现在有一个复杂的方法,有没有更优雅的方法来做到这一点?分配新列时,您必须指定列名。然而,由于某种原因,这不能是可变的。所以我使用了一个虚拟的,然后根据我之前定义的列表更改了列名。不过,这似乎不太优雅。数据帧列应该是 [wavelength, layers[0]_n, layers[0]_k, ... layers[ z ]_n, layers[ 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 wavelengthfor 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 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
因为我无权访问您的 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()允许在创建每列时使用变量名称来创建列标题。
添加回答
举报
0/150
提交
取消