为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2022-01-05 19:51:36
我有一个 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()允许在创建每列时使用变量名称来创建列标题。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信