如何使用循环将列表数据添加至Pandas DataFrame?
问题描述
我需要通过循环向Pandas的单元格中添加数据。目前我可以直接创建DataFrame得到目标结果,代码如下:
import pandas as pd host = ['R1','R2','R3','R4','R5'] ip = ['192.168.1.10','192.168.1.20','192.168.1.30','192.168.1.40','192.168.1.50'] data = pd.DataFrame({'Hostname' : host,'IP Address' : ip}) # 用这种方式创建的DataFrame结果如下: data
输出结果:
Hostname IP Address 0 R1 192.168.1.10 1 R2 192.168.1.20 2 R3 192.168.1.30 3 R4 192.168.1.40 4 R5 192.168.1.50
但我的需求是通过循环把host和ip列表的内容添加进去,现有循环框架如下:
for h,i in zip(host,ip): # 这里需要编写代码
希望最终得到和直接创建方式完全相同的DataFrame结果。请问循环内的代码该怎么写?
解决方案
方法1:初始化空DataFrame,循环内逐行追加
先创建指定列名的空DataFrame,循环中将每组h和i构造成字典,通过append方法添加到DataFrame中,设置ignore_index=True保证索引连续:
import pandas as pd host = ['R1','R2','R3','R4','R5'] ip = ['192.168.1.10','192.168.1.20','192.168.1.30','192.168.1.40','192.168.1.50'] # 初始化空DataFrame并指定列名 data = pd.DataFrame(columns=['Hostname', 'IP Address']) for h,i in zip(host,ip): # 构造单行数据并追加 data = data.append({'Hostname': h, 'IP Address': i}, ignore_index=True) print(data)
方法2:循环收集数据列表,最后转成DataFrame(更高效)
Pandas频繁追加行的效率较低,更优的方式是先通过循环把数据存入列表,最后一次性转换为DataFrame:
import pandas as pd host = ['R1','R2','R3','R4','R5'] ip = ['192.168.1.10','192.168.1.20','192.168.1.30','192.168.1.40','192.168.1.50'] # 初始化空列表存储数据 data_list = [] for h,i in zip(host,ip): # 将每组数据转为字典加入列表 data_list.append({'Hostname': h, 'IP Address': i}) # 列表转DataFrame data = pd.DataFrame(data_list) print(data)
注意事项
- 方法1每次
append都会生成新的DataFrame对象,数据量大时性能较差,优先选方法2。 - 实际生产场景中,直接用
pd.DataFrame({'Hostname': host, 'IP Address': ip})是最优方案,因为Pandas对向量式操作做了专门优化。
内容的提问来源于stack exchange,提问作者ver_roh
相关产品推荐
相关产品推荐

