python - 在 for 循环中分配新列时将标题名称分配给熊猫数据框的优雅方法?
问题描述
我有一个 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
解决方案
因为我无权访问您的 CSV 等,所以我正在创建一些假数据来模拟这个过程......
让我们从几个 DataFrames 开始:
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()
允许在创建每列时使用变量名称来创建列标题。
推荐阅读
- javascript - 如何在 Fullcalendar v4 中的特定日期呈现文本?
- python - 如何正确初始化神经网络模型中所需的向量?
- android - 如何在不使用 JSON 和 GSON 的情况下将 HashMap 保存在 Room 数据库中?
- php - 无法使用 php 连接到我的 sql,未定义函数 mysql_connect()
- android - Android Q 中的 Landroid/view/LayoutInflater 类中没有字段 mConstructorArgs
- reactjs - 将父值作为变量反应给子组件
- javascript - 在jQuery中选择当前时如何禁用或非活动复选框
- angular - Spring boot 中的 Cors 策略问题:自定义标头问题
- php - ACF 逗号分隔的数组值
- java - 当我安装了 jdk 13 但在 cmd 中它显示了 java 7 的版本