Saya memiliki kerangka data ini:

    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

Saya perlu membuat fitur temporal seperti ini:

    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

Bagaimana saya bisa melakukan ini secara otomatis? struktur apa yang harus saya gunakan, fungsi apa? Saya diberitahu bahwa kerangka data harus menjadi array array, itu tidak terlalu jelas bagi saya

0
user3053236 27 Januari 2020, 13:29

2 jawaban

Jawaban Terbaik

Jika saya memahaminya dengan benar, Anda ingin mis. daftar kerangka data, di mana setiap kerangka data adalah bagian lanjutan dari bingkai asli. Contoh ini akan memberi Anda daftar kerangka data:

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)]

Harap dicatat bahwa Anda menduplikasi banyak data dan dengan demikian meningkatkan penggunaan memori. Jika Anda hanya perlu melakukan operasi pada irisan berikutnya, Anda sebaiknya mengulang kerangka data dan menerapkan fungsi Anda. Lebih baik lagi, jika memungkinkan, Anda harus mencoba melakukan verktorisasi operasi Anda, karena ini kemungkinan akan membuat perbedaan besar dalam kinerja.

EDIT: menyimpan irisan ke file:

Jika Anda hanya tertarik untuk menyimpan irisan ke file (misalnya dalam csv), Anda tidak perlu terlebih dahulu membuat daftar semua irisan (dengan penggunaan memori terkait). Sebagai gantinya, ulangi irisan (dengan mengulangi indeks awal yang menentukan setiap irisan), dan simpan setiap irisan ke file.

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)
0
RubenB 29 Januari 2020, 12:14

Hai saya telah mencoba ini yang mungkin menghasilkan harapan Anda, berdasarkan indeks:

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

Keluaran pertama dari 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

Hasil Akhir

   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

Catatan: Saya juga baru di python mungkin ada beberapa cara terpendek yang mungkin untuk mencapai hasil yang diharapkan.

0
The Guy 27 Januari 2020, 11:42