Как я могу преобразовать Dataframe во многие временные функции в Python? - PullRequest
0 голосов
/ 27 января 2020

у меня есть этот фрейм данных:

    Timestamp   DATA0   DATA1   DATA2   DATA3   DATA4   DATA5   DATA6   DATA7
0   1.478196e+09    219 128 220 27  141 193 95  50
1   1.478196e+09    95  237 27  121 90  194 232 137
2   1.478196e+09    193 22  103 217 138 195 153 172
3   1.478196e+09    181 120 186 73  120 239 121 218
4   1.478196e+09    70  194 36  16  81  129 95  217
... ... ... ... ... ... ... ... ... ...
242 1.478198e+09    15  133 112 2   236 81  94  252
243 1.478198e+09    0   123 163 160 13  156 145 32
244 1.478198e+09    83  147 61  61  33  199 147 110
245 1.478198e+09    172 95  87  220 226 99  108 176
246 1.478198e+09    123 240 180 145 132 213 47  60

Мне нужно создать временные функции, подобные этим:

    Timestamp   DATA0   DATA1   DATA2   DATA3   DATA4   DATA5   DATA6   DATA7
0   1.478196e+09    219 128 220 27  141 193 95  50
1   1.478196e+09    95  237 27  121 90  194 232 137
2   1.478196e+09    193 22  103 217 138 195 153 172
3   1.478196e+09    181 120 186 73  120 239 121 218
4   1.478196e+09    70  194 36  16  81  129 95  217

Timestamp   DATA0   DATA1   DATA2   DATA3   DATA4   DATA5   DATA6   DATA7
1   1.478196e+09    95  237 27  121 90  194 232 137
2   1.478196e+09    193 22  103 217 138 195 153 172
3   1.478196e+09    181 120 186 73  120 239 121 218
4   1.478196e+09    70  194 36  16  81  129 95  217
5   1.478196e+09    121 69  111 204 134 92  51  190

    Timestamp   DATA0   DATA1   DATA2   DATA3   DATA4   DATA5   DATA6   DATA7
2   1.478196e+09    193 22  103 217 138 195 153 172
3   1.478196e+09    181 120 186 73  120 239 121 218
4   1.478196e+09    70  194 36  16  81  129 95  217
5   1.478196e+09    121 69  111 204 134 92  51  190
6   1.478196e+09    199 132 39  197 159 242 153 104

Как я могу сделать это автоматически? какую структуру я должен использовать, какие функции? Мне сказали, что датафрейм должен стать массивом массивов, это мне не очень понятно

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Привет Я попробовал это, что может привести к вашим ожиданиям, на основе индексов:

import numpy as np
import pandas as pd

x=np.array([[8,9],[2,3],[9,10],[25,78],[56,67],[56,67],[72,12],[98,24],
            [8,9],[2,3],[9,10],[25,78],[56,67],[56,67],[72,12],[98,24]])

df=pd.DataFrame(np.reshape(x,(16,2)),columns=['Col1','Col2'])
print(df)
print("**********************************")
count=df['Col1'].count()   # number of rows in dataframe
i=0                        # to set index from starting point for every iteration
n=4                        # to set index to end point for every iteration
count2=3                   # This is important , if you want 4 row then yo must set this count2 4-1 i.e 3,let say if you want 5 rows then count2 must be 5-1 i.e 4

while count !=0:           # condition till the count gets set to 0
    df1=df[i:n]            # first iteration i=0, n=4(if you want four rows), second iteration i=n i.e i=4, and n will be n=n+4 i.e 8
    if i>0:
        print(df1.set_index(np.arange(i-count2,n-count2)))
        count2=count2+3    # Incrementing count2, so the index will be like in first iteration 0 to 3 then 1 to 4 and so on.
    else:
        print(df1.set_index(np.arange(i,n)))
    i=n
    count=count-4
    n=n+4

Первый вывод Dataframe

    Col1  Col2
0      8     9
1      2     3
2      9    10
3     25    78
4     56    67
5     56    67
6     72    12
7     98    24
8      8     9
9      2     3
10     9    10
11    25    78
12    56    67
13    56    67
14    72    12
15    98    24

Final Ouput

   Col1  Col2
0     8     9
1     2     3
2     9    10
3    25    78
   Col1  Col2
1    56    67
2    56    67
3    72    12
4    98    24
   Col1  Col2
2     8     9
3     2     3
4     9    10
5    25    78
   Col1  Col2
3    56    67
4    56    67
5    72    12
6    98    24

Примечание: я также новичок в python, могут быть некоторые кратчайшие пути для достижения ожидаемого результата.

0 голосов
/ 27 января 2020

Если я правильно понимаю, вам нужен, например, список фреймов данных, где каждый фрейм данных представляет собой прогрессивный фрагмент исходного фрейма. Этот пример даст вам список фреймов данных:

import pandas as pd

# dummy dataframe
df = pd.DataFrame({'col_1': range(10), 'col_2': range(10)})

# returns slices of size slice_length with step size 1
slice_length = 5
lst = [df.iloc[i:i+slice_length,: ] for i in range(df.shape[0] - slice_length)]

Обратите внимание, что вы дублируете много данных и, следовательно, увеличиваете использование памяти. Если вам просто нужно выполнить операцию с последующими срезами, вам лучше использовать l oop над кадром данных и применить свою функцию. Еще лучше, если возможно, вы должны попытаться по вертикали вашей операции, поскольку это, вероятно, будет иметь огромное значение в производительности.

РЕДАКТИРОВАТЬ : сохранение фрагментов в файл:

Если вы заинтересованы только в сохранении фрагментов в файл (например, в формате CSV), вам не нужно сначала создавать список всех фрагментов (с соответствующим использованием памяти). Вместо этого l oop поверх фрагментов (путем циклического перебора начальных индексов, определяющих каждый фрагмент) и сохранения каждого фрагмента в файл.

slice_length = 5

# loop over indices (i.e. slices)
for idx_from in range(df.shape[0] - slice_length):
    # create the slice and write to file
    df.iloc[idx_from: idx_from + slice_length, :].to_csv(f'slice_starting_idx_{idx_from}.csv', sep=';', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...