DataFrame 在没有循环的情况下更新行的最快方法
DataFrame fastest way to update rows without a loop
创建场景:
假设一个包含两个系列的数据帧,其中 A
是输入,B
是 A[index]*2
的结果:
df = pd.DataFrame({'A': [1, 2, 3],
'B': [2, 4, 6]})
假设我正在接收一个 100k 行的数据帧并在其中搜索错误(此处 B->0
无效):
df = pd.DataFrame({'A': [1, 2, 3],
'B': [2, 0, 6]})
使用
搜索无效行
invalid_rows = df.loc[df['A']*2 != df['B']]
我现在有 invalid_rows
,但我不确定用 A[index]*2
的结果覆盖原始 df
中的无效行的最快方法是什么?
使用 iterrows()
迭代 df
是一种选择,但如果 df
增长则速度较慢。我能以某种方式使用 df.update()
吗?
带循环的工作解决方案:
index = -1
for row_index, my_series in df.iterrows():
if myseries['A']*2 != myseries['B']:
df[index]['B'] = myseries['A']*2
但是有更快的方法吗?
创建场景:
假设一个包含两个系列的数据帧,其中 A
是输入,B
是 A[index]*2
的结果:
df = pd.DataFrame({'A': [1, 2, 3],
'B': [2, 4, 6]})
假设我正在接收一个 100k 行的数据帧并在其中搜索错误(此处 B->0
无效):
df = pd.DataFrame({'A': [1, 2, 3],
'B': [2, 0, 6]})
使用
搜索无效行invalid_rows = df.loc[df['A']*2 != df['B']]
我现在有 invalid_rows
,但我不确定用 A[index]*2
的结果覆盖原始 df
中的无效行的最快方法是什么?
使用 iterrows()
迭代 df
是一种选择,但如果 df
增长则速度较慢。我能以某种方式使用 df.update()
吗?
带循环的工作解决方案:
index = -1
for row_index, my_series in df.iterrows():
if myseries['A']*2 != myseries['B']:
df[index]['B'] = myseries['A']*2
但是有更快的方法吗?