亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嵌套 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 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號