Python 意外地迭代列表中的每个元素两次
Python is unexpectedly iterating over each element in a list twice
在下面的函数中,我试图对数据帧列表中包含的数据帧中的价格进行标准化(将它们转换为与起始价格的百分比差异)。每个数据框都有两列:日期和价格。
def normalize_windows(window_data: List[DataFrame]):
starting_price = window_data[0]['price'].values[0]
for window in window_data:
for index, row in window.iterrows():
window.at[index, 'price'] = (row['price'] / starting_price) - 1
return window_data
现在,当我调试 python 中的代码时,列表中的每个数据帧都会因此循环两次,从而使所有值或多或少 -1。
我的循环方式是否有我不知道的意外行为?
您不需要迭代:
>>> df
price
0 12
1 15
2 10
3 12
4 12
5 18
6 11
7 12
8 15
9 10
>>> df['price'] / df.iloc[0]['price'] - 1
0 0.000000
1 0.250000
2 -0.166667
3 0.000000
4 0.000000
5 0.500000
6 -0.083333
7 0.000000
8 0.250000
9 -0.166667
Name: price, dtype: float64
def normalize_windows(window_data: List[DataFrame]):
starting_price = window_data.iloc[0]['price']
window_data = (window_data['price'] / starting_price - 1)
return window_data
在下面的函数中,我试图对数据帧列表中包含的数据帧中的价格进行标准化(将它们转换为与起始价格的百分比差异)。每个数据框都有两列:日期和价格。
def normalize_windows(window_data: List[DataFrame]):
starting_price = window_data[0]['price'].values[0]
for window in window_data:
for index, row in window.iterrows():
window.at[index, 'price'] = (row['price'] / starting_price) - 1
return window_data
现在,当我调试 python 中的代码时,列表中的每个数据帧都会因此循环两次,从而使所有值或多或少 -1。
我的循环方式是否有我不知道的意外行为?
您不需要迭代:
>>> df
price
0 12
1 15
2 10
3 12
4 12
5 18
6 11
7 12
8 15
9 10
>>> df['price'] / df.iloc[0]['price'] - 1
0 0.000000
1 0.250000
2 -0.166667
3 0.000000
4 0.000000
5 0.500000
6 -0.083333
7 0.000000
8 0.250000
9 -0.166667
Name: price, dtype: float64
def normalize_windows(window_data: List[DataFrame]):
starting_price = window_data.iloc[0]['price']
window_data = (window_data['price'] / starting_price - 1)
return window_data