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

嵌套 for 循环的替代方案

嵌套 for 循环的替代方案

千万里不及你 2023-07-11 10:50:53
我有一个 pandas df,其中一些列包含空白值。我有一个嵌套的 for 循环,它通过从列表中提取这些值来填充这些列。给定列的所有行都获得相同的值,这是正确的。这里的顺序很重要,因为col1需要值val1。import pandas as pddf = pd.DataFrame({"col1": ["", "", ""],                     "col2": ["", "", ""],                     "col3": ["Facebook, Instagram", "Facebook, Facebook", "Twitter"]})Columns = ['col1', 'col2'] #list of column names that the code should iterate overValues = ['val1', 'val2'] #list of values to be inserted in the given columnsfor n in Columns:    for i in df:        df[Columns] = Values输出:    col1    col2    col30   val1    val2    Facebook, Instagram1   val1    val2    Facebook, Facebook2   val1    val2    Twitter我当前的代码可以工作,但处理大量数据时速度非常慢。我可以做什么来改善它?
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

我认为最简单的是传递变量,例如:


df[Columns] = Values

print (df)

   col1  col2                 col3

0  val1  val2  Facebook, Instagram

1  val1  val2   Facebook, Facebook

2  val1  val2              Twitter

100k 行的性能:


df = pd.DataFrame({"col1": ["", "", ""],

                     "col2": ["", "", ""],

                     "col3": ["Facebook, Instagram", "Facebook, Facebook", "Twitter"]})


Columns = ['col1', 'col2'] #list of column names that the code should iterate over

Values = ['val1', 'val2'] #list of values to be inserted in the given columns


df = pd.concat([df] * 100000, ignore_index=True)



%timeit df[Columns] = Values

7.53 ms ± 40.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


查看完整回答
反对 回复 2023-07-11
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

两个循环(外部循环和内部循环)都是不必要的:n并且i从未使用过,并且您执行相同的操作 n*i 次,因此代码很慢。只需摆脱循环并简单地使用df[Columns] = Values.



查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

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