Saya memiliki kerangka data dalam format di bawah ini:
Original Dataframe
| x | value1 | value2 | value3 | value4
---|-----|----------|----------|----------|-----------
0 | 1 | 1 | NaN | 3 | 1
1 | 2 | 4 | NaN | 1 | NaN
2 | 3 | 2 | 6 | 1 | 2
3 | 4 | 1 | 1 | 2 | 1
Tujuan saya adalah mendapatkan nilai rata-rata, untuk setiap baris, menghilangkan NaN dan juga menghilangkan outlier. Tujuannya adalah untuk mencapai kerangka data baru dengan format berikut:
Desired Dataframe
| x | mean (after dropping the NaN and the outliers)*
---|-----|--------
0 | 1 | a
1 | 2 | b
2 | 3 | c
3 | 4 | d
*Perhatikan bahwa a, b, c, d adalah nilai rata-rata (saya tidak menghitung hasilnya)
Tujuan akhir setelah mencapai hasil adalah mencetak grafik nilai dari waktu ke waktu.
Bekerja dengan satu daftar nilai, misalnya setara dengan satu kolom nilai dan satu kolom indeks, saya bisa melakukan semua operasi: hapus NaN, hitung skor Z, lalu kembalikan daftar nilai, seperti yang ditunjukkan di bawah:
import pandas as pd
import numpy as np
from scipy import stats
data = {'value': [1, 2, 15, np.NaN, 2, 2, 2, 3, 1, 1],
'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
df.dropna(inplace=True)
df = df[(np.abs(stats.zscore(df['return'])) < 2)]
Ada beberapa masalah yang muncul ketika saya mencoba bekerja secara massal (dan saya yakin masalah tersebut muncul karena saya terbiasa memprogram menggunakan loop dan harus ada cara yang "pintar" untuk melakukan operasi ini di Pandas.)
Saya tidak bisa menghitung skor Z ketika ada nilai NaN. Saya mendapat kesalahan ini:
/home/jupyterlab/conda/lib/python3.6/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in less
Jadi saya tahu bahwa saya harus menghilangkan NaN. Tetapi saya tidak dapat melakukannya dalam format kerangka data ini karena ini berarti menghilangkan baris atau kolom yang mengakibatkan hilangnya informasi.
Pendekatan lain yang saya coba namun tidak berhasil adalah mengubah tabel ini menjadi bentuk panjang, artinya saya akan mendapatkan:
| x | valueName | actualValue
---|-----|-------------|--------------
0 | 1 | value1 | 1
1 | 1 | value2 | NaN
... ... ... ...
2 | 2 | value2 | 4
3 | 2 | value2 | NaN
Hal ini membuat saya menjatuhkan Nan, tetapi untuk menggunakan skor Z lebih bermasalah. Saya yakin ini adalah masalah umum, tetapi saya tidak tahu cara mengatasinya.
NaN
menjadi0
? - person Sociopath   schedule 27.03.2019