Я читал о , как оптимизировать pandas код для скорости , и я пытаюсь реорганизовать мой код, переключившись с iterrows()
на векторизацию. Вот пример старого кода и его результата:
Старый код
import pandas as pd
def repeatAsList(value):
return([value, value])
df = pd.DataFrame({"values": [1,2,3], "repeatedAsList":None})
for index, row in df.iterrows():
df.at[index,"repeatedAsList"] = repeatAsList(row['values'])
df
Старый результат
+--------+----------------+
| values | repeatedAsList |
+--------+----------------+
| 1 | [1, 1] |
| 2 | [2, 2] |
| 3 | [3, 3] |
+--------+----------------+
Новый код
import pandas as pd
def repeatAsList(value):
return([value, value])
df = pd.DataFrame({"values": [1,2,3], "repeatedAsList":None})
df["repeatedAsList"] = repeatAsList(df["values"])
Новый результат
ValueError: Length of values does not match length of index
Я хотел бы понять, почему новый код не работает, и если возможно запустить другой путь и добиться улучшения скорости из старого кода. Я чувствую, что мне не хватает ключевой точки векторизации, и было бы неплохо узнать, почему значения должны быть скалярными.