在for循环中分配新列时为pandas数据框分配标题名称的优雅方法?

我有一个 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 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


慕田峪4524236
浏览 116回答 1
1回答

开心每一天1111

因为我无权访问您的 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  SiO20  1  2  3   2     21  4  5  6   5     52  7  8  9   8     8使用此技术,而不是使用.assign()允许在创建每列时使用变量名称来创建列标题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python