Próbuję utworzyć tablicę równomiernie rozmieszczonych wartości zmiennoprzecinkowych z krokiem 1e-05.

Próbowałem tego;

df["new_col"] = (0, len(df.index), dt)

Gdzie dt to krok czasowy, a df to oryginalna ramka DataFrame

Rozumiem, że to nie zadziała, ponieważ wymaga liczb całkowitych, jednak czy istnieje inny czysty sposób, który pozwala uniknąć używania pętli itp.?

Dzięki

0
Iceberg_Slim 5 styczeń 2022, 14:24
Użyć metody arange numpy? Jak np.arange(0, max, 1e-5).
 – 
Arvin Kushwaha
5 styczeń 2022, 14:27
1
Czy jesteś pewien co do nawiasów, czy też powinien to być df["new_col"], i czy na pewno wystarczy przypisanie samej krotki, nawet z wartościami całkowitymi?
 – 
Serge Ballesta
5 styczeń 2022, 14:27

2 odpowiedzi

Najlepsza odpowiedź

Pewna precyzja, gdy próbujesz wstawić wynikowe dane do ramki danych.

Po prostu używając numpy.arange, nie możesz znać z góry liczbę wartości, które zostaną zwrócone. Spowoduje to zwrócenie błędu ValueError, jeśli długość nie jest zgodna z długością ramki danych (co najprawdopodobniej będzie miało miejsce, jeśli po prostu wybierzesz losową górną granicę). Musisz więc obliczyć górną granicę.

Musisz również wziąć pod uwagę, że względna precyzja zmiennoprzecinkowa może dać jedną dodatkową wartość (np. jeśli start = 30). Więc bezpieczną rzeczą byłoby pocięcie wyjścia arange.

dt = 1e-5
start = 30
df['new_col'] = np.arange(start, start+len(df)*dt, dt)[:len(df)]

Przykład:

df = pd.DataFrame({'col': range(7)})
dt = 1e-5
start = 30
df['new_col'] = np.arange(start, start+len(df)*dt, dt)[:len(df)]

Wynik:

   col   new_col
0    0  30.00000
1    1  30.00001
2    2  30.00002
3    3  30.00003
4    4  30.00004
5    5  30.00005
6    6  30.00006
1
mozway 5 styczeń 2022, 14:41

W tym celu możesz użyć arange NumPy:

import numpy as np
start=1
stop=10
step=0.05
df['column_name']=np.arange(start,stop, step)

Upewnij się, że liczba pływaków jest taka sama jak długość twojego df.

1
OnY 5 styczeń 2022, 14:27