%Jupyter中的timeit问题是因为函数中的“%”语法?

2024-04-26 23:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Jupyter中%timeit一个函数。在

生成数据

df["One"] = range(1,1001)
df["Two"] = range(2000, 3000)
df["Three"] = range(3000, 4000)
df.set_index(["One"], drop = True, inplace = True)

设置功能

^{pr2}$

当我运行test_iterrows(df)时,我得到:

      Two Three
One            
1    2000  Even
2    2001   Odd
3    2002  Even
4    2003   Odd
5    2004  Even

很好。功能正常。但是,当我%timeit test_iterrows(df)时,我得到一个错误:

<ipython-input-29-326f4a0f49ee> in test_iterrows(df)
     13 def test_iterrows(df):
     14     for index, row in df.iterrows():
---> 15         if (row["Three"] & 1 == 0):
     16             df.loc[index, "Three"] = "Even"
     17         else:

TypeError: unsupported operand type(s) for &: 'str' and 'int'

这是怎么回事?我的(可能是错误的)解释是,我显然不能%timeit包含%的函数。在

这是怎么回事?在


Tags: 函数test功能truedfindex错误range
1条回答
网友
1楼 · 发布于 2024-04-26 23:27:09

%timeit重复执行语句,并且函数将df更改到位。请注意,当我只调用函数两次时,会出现相同的异常:

test_iterrows(df)
test_iterrows(df)
# TypeError: unsupported operand type(s) for &: 'str' and 'int'

您可能应该传入一个copy,尽管这会稍微“偏移”时间,因为它也会乘以复制它所需的时间:

^{pr2}$

另外,我也不太确定gc.collect()调用在那里应该做什么,因为gc.collect只是垃圾收集对象,这些对象由于引用循环而不能被正常方式丢弃。在

相关问题 更多 >