Mam dane z danymi akcelerometru, które chciałem zwizualizować. Ale kiedy konwertuję czas z obiektu na timedelta za pomocą pandy, pokazuje mi inny wykres. co mogę zrobić, aby wykreślić dane w prawo.

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_json("Right_191018_10-51-15_Eating_Floor_FrenchToast_ForkKnifeHand.json")
df[['Date','Time','GMT']] = df['loggingTime'].str.split(' ',expand=True)
dfright=pd.DataFrame({
    'X':df['accelerometerAccelerationX'],
    'Y':df['accelerometerAccelerationY'],
    'Z':df['accelerometerAccelerationZ'], 
    'Time':df['Time']
          })
print(dfright.dtypes)
plt.figure(figsize=(20,10))
plt.figtext('.5','.99','Acelrometer Data',fontsize=18,ha='center')

x,=plt.plot(
    dfright['Time'],
             dfright['X'],
    label='x'
    )
plt.legend([x],['x'])
plt.xlabel('time ')
plt.ylabel('accelro')
plt.title('Right Hand')
plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10))

dfright['Time']=pd.to_timedelta(dfright['Time'])
print(dfright.dtypes)
plt.figure(figsize=(20,10))
plt.figtext('.5','.99','Acelrometer Data',fontsize=18,ha='center')

x,=plt.plot(
    dfright['Time'],
             dfright['X'],
    label='x'
    )
 plt.legend([x],['x'])
 plt.xlabel('time ')
 plt.ylabel('accelro')
 plt.title('Right Hand')
 plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10))

Dane

            X         Y         Z          Time
0    0.187256 -0.113373 -0.978668  10:51:15.627
1    0.203720 -0.121597 -0.967041  10:51:15.645
2    0.210968 -0.117950 -0.956497  10:51:15.648
3    0.221909 -0.114548 -0.949478  10:51:15.651
4    0.231415 -0.108597 -0.939728  10:51:15.656
..        ...       ...       ...           ...
992  0.275085  0.186905 -0.960556  10:58:28.910
993  0.251862  0.170105 -0.967285  10:58:28.925
994  0.266571  0.177551 -0.969528  10:58:28.940
995  0.277298  0.194107 -0.974319  10:58:28.955
996  0.273453  0.204010 -0.980560  10:58:28.973

Tutaj jest dtype przed konwersją do timedelta

X       float64 
Y       float64 
Z       float64 
Time     object 
dtype: object

enter image description here

Tutaj jest dtype po konwersji na timedelta

            X         Y         Z            Time
0    0.187256 -0.113373 -0.978668 10:51:15.627000
1    0.203720 -0.121597 -0.967041 10:51:15.645000
2    0.210968 -0.117950 -0.956497 10:51:15.648000
3    0.221909 -0.114548 -0.949478 10:51:15.651000
4    0.231415 -0.108597 -0.939728 10:51:15.656000
..        ...       ...       ...             ...
992  0.275085  0.186905 -0.960556 10:58:28.910000
993  0.251862  0.170105 -0.967285 10:58:28.925000
994  0.266571  0.177551 -0.969528 10:58:28.940000
995  0.277298  0.194107 -0.974319 10:58:28.955000
996  0.273453  0.204010 -0.980560 10:58:28.973000
X               float64
Y               float64
Z               float64
Time    timedelta64[ns]
dtype: object

enter image description here

1
Muhammad Ahmed 20 listopad 2019, 23:14
Jak wygląda kolumna Time po konwersji? Wygląda na to, że nie odbiera prawidłowo w dniu rzeczywistym.
 – 
jorijnsmit
20 listopad 2019, 23:34
Zredagowałem mój post.
 – 
Muhammad Ahmed
21 listopad 2019, 02:22
Wydaje się, że również dodaje dni, ale nie pokazuje się w ramce danych. kiedy wykonuję dfright['Time'].iloc[0], otrzymuję to 0 dni 10:51:15.627000
 – 
Muhammad Ahmed
21 listopad 2019, 02:26
Jaki jest typ danych dfright['Time']? Strunowy?
 – 
pedro_bb7
21 listopad 2019, 05:23
Tak to jest ciąg (obj)
 – 
Muhammad Ahmed
22 listopad 2019, 18:17

2 odpowiedzi

Z tego tematu konwertowanie ciągu czasu na sekundy w pytonie

timestr = '00:04:23'

ftr = [3600,60,1]

sum([a*b for a,b in zip(ftr, map(int,timestr.split(':')))])
Output is 263Sec.

Możesz uruchomić funkcję, aby przekonwertować ciąg na s (potrzebujesz pewnych modyfikacji w kodzie)

Później odejmij każdą wartość od pierwszej i gotowe.

0
pedro_bb7 21 listopad 2019, 05:29

Nie jestem pewien, dlaczego chcesz używać dtype Timedelta? Oznacza różnicę w czasie.

Uważam, że do celów (kreślenia) szukasz .to_datetime().

Spróbuj wymienić

dfright['Time']=pd.to_timedelta(dfright['Time'])

Z

dfright['Time']=pd.to_datetime(dfright['Time'])
0
eyllanesc 12 grudzień 2019, 08:53
Właściwie mam dwa dane z akcelerometru dla obu rąk, wykonując jakąś czynność. chciałem wiedzieć, jaki wykres będzie wyświetlany w tym samym czasie. dlatego użyłem timedelta. Próbowałem również twojego rozwiązania, ale wykres jest taki sam jak timedelta
 – 
Muhammad Ahmed
22 listopad 2019, 18:16