Вот мой датафрейм

ord_datetime
2019-05-01    22.483871
2019-05-02    27.228070
2019-05-03    30.140625
2019-05-04    32.581633
2019-05-05    30.259259

Если я сделаю код, как это

b=[]

b.append((df.iloc[2]-df.iloc[1])/(df.iloc[1]))

print(b)

Выход

[Ordered Items    0.106969
dtype: float64]

Я хочу вывод, как 0.106969 только

Как я могу это сделать?

2
Jose 4 Июл 2019 в 00:41

3 ответа

Лучший ответ

Вы работаете с Series здесь, поэтому вы получаете этот результат. Ваш iloc возвращает Series из 1 элемента, а арифметические операторы также возвращают ряды. Если вы хотите получить скалярное значение, вы можете просто использовать my_series[0].

Итак, для вашего примера:

data = {datetime(2019, 5, 1): 22.483871, datetime(2019, 5, 2): 27.228070,
        datetime(2019, 5, 3): 30.140625, datetime(2019, 5, 4): 32.581633,
        datetime(2019, 5, 5): 30.259259}
df = pd.DataFrame.from_dict(data, orient="index")
series_result = (df.iloc[2] - df.iloc[1]) / df.iloc[1]
scalar_result = series_result[0]

# you can append the result to your list if you want

1
Daniel Perez 3 Июл 2019 в 22:01

Вы можете сделать что-то вроде следующего

import pandas as pd

data = {
    "ord_datetime": ["2019-05-01","2019-05-02","2019-05-03","2019-05-04","2019-05-05"],
    "value": [22.483871,27.228070,30.140625,32.581633,30.259259]
}

df = pd.DataFrame(data=data)

res = [ (df.iloc[ridx + 1, 1] - df.iloc[ ridx, 1]) / (df.iloc[ridx, 1]) for ridx in range(0, df.shape[0]-1) ]
res # [0.2110045463256749, 0.10696883767376833, 0.08098730533955406, -0.0712786249848188]

Надеюсь, это поможет.

1
pdm 3 Июл 2019 в 22:29

Если вы хотите просто получить значения из вывода, вы можете использовать df.values, который возвращает пустой массив. Если вам нужен список из этого массива, вы можете использовать np_array.tolist.

Так

b = ((df.iloc[2]-df.iloc[1])/(df.iloc[1])).values #returns numpy array
b.tolist # returns python list
0
Riley White 3 Июл 2019 в 21:57