Некоторые тестовые данные
df = pd.DataFrame(np.random.rand(5, 5))
df = df.mask(np.random.random(df.shape) < .1)
0 1 2 3 4
0 0.579643 0.614592 0.333945 0.241791 0.426162
1 0.576076 0.841264 0.235148 0.577707 0.278260
2 0.735097 0.594789 0.640693 0.913639 0.620021
3 0.015446 NaN 0.062203 0.253076 0.042025
4 0.401775 0.522634 0.521139 0.032310 NaN
Применение вашего кода
for c in df:
print(100 * np.log(df[c]).diff())
дает такой вывод (для c = 1
):
0 NaN
1 31.394708
2 -34.670002
3 NaN
4 NaN
Вы можете удалить nans
с помощью .dropna()
for c in df:
print(100 * np.log(df[c].dropna()).diff())
, что дает (для c = 1
)
0 NaN
1 31.394708
2 -34.670002
4 -12.932474
Как видите, мы "потеряли" одну строку как следствие .dropna()
и ваш 0-й ряд всегда будет nan
, так как нет никакой разницы.
Если вы заинтересованы в замене nans другими значениями, существуют различные методы, такие как fillna или вменение .