पंडों में समय की बातचीत
tldr; डेटफ़ाइंडेक्स को डेटाफ़्रेम में कॉलम में वापस कैसे परिवर्तित करूँ?
लंबी व्याख्या:
मेरे पास एक ही समय अवधि के लिए एक्सेलेरोमीटर और लोडसेल डेटा है, लेकिन प्रत्येक डिवाइस के लिए टाइमस्टैम्प विभिन्न प्रारूपों और टाइमज़ोन में हैं। मेरा वर्तमान सिद्धांत यह है कि मुझे उन्हें एक ही प्रारूप में रखने की आवश्यकता है ताकि मैं दोनों डेटासेट को एक डेटाफ़्रेम में मर्ज कर सकूँ।
मेरा पहला कदम यह था कि डेटा में सही तरीके से पढ़कर इस प्रक्रिया को जितना जल्दी संभव हो सके। उस अंत तक, मैंने लोड डेटा के लिए दिनांक और समय डेटा को जोड़ दिया और उस कॉलम को "टाइम" नाम दिया, ताकि यह एक्सेलेरोमीटर डेटा के समान हो।
import pandas as pd
import datetime as dt
path = r"C:\Users\afhal\Dropbox\Arboriculture\ThesisData\Kane_Shared_Folder\2020Summer"
load_path = path + "\\" + r"ulmus15\Reference\ulmus15loads.csv"
pull_path = path + "\\"+ r"ulmus15\Reference\ulmus15pulls.csv"
df_pull = pd.read_csv(pull_path, skiprows =22, parse_dates = ["Time"])
print(df_pull)
df_load = pd.read_csv(load_path, parse_dates = [["Date","Time"]])
df_load = df_load.rename(columns = {"Date_Time": "Time", "Elapsed mS": "Elapsed S", "Climber": "Load"})
print(df_load)
एक्सेलेरोमीटर डेटा के लिए परिणाम
Time 12159:ch4 12159:ch5 12160:ch4 12160:ch5 <br>
0 2020-07-25 13:20:46 52.56000 -27.23 73.34 8.86
1 2020-07-25 13:20:47 52.18000 -27.04 73.02 8.99
2 2020-07-25 13:20:48 52.18000 -27.03 73.8 8.98
3 2020 -07-25 13:20:49 52.35000 -27.47 73.04 8.97
4 2020-07-25 13:20:50 52.31000 -26.84 73.03 8.98
... ... ... ... ...
9266 2020 -07-26 11:22:49 81.07000 0.19 80.64 -0.32
9267 2020-07-26 11:22:50 81.75999 -0.08 80.63 -0.32
9268 2020-07-26 11:22:51 81.06000 0.18 80.66 -0.32
9269 2020- 07-26 11:22:52 81.77000 -0.08 80.64 -0.31
9270 2020-07-26 11:22:53 NaN NaN 80.64 -0.31
[9271 पंक्तियाँ x 5 कॉलम]
लोड सेल डेटा के लिए परिणाम
Time Elapsed S Load
0 2020-07-25 09:26:28 1002 2
1 2020-07-25 09:26:29 2011 2
2 2020-07-25 09:26:30 3035 3
3 2020-07-25 09:26:31 4037 2
4 2020-07-25 09:26:32 5060 2
... ... ... ...
1302 2020-07-25 09:48:24 1317109 -2
1303 2020-07-25 09:48 : 25 1318135 -2
1304 2020-07-25 09:48:26 1319165 -1
1305 2020-07-25 09:48:27 1320177 -2
1306 2020-07-25 09:48:28 1321178 -1
[१३० [पंक्तियाँ x ३ कॉलम]
मुझे Accelerometer Data को US / Eastern में बदलने की आवश्यकता है। अन्य स्टैकऑवरफ्लो प्रश्नों को पढ़ने से मेरी समझ यह है कि मुझे अपने टाइम कॉलम को पंडों डेटाइम से पंडों डेटाइमइंडेक्स पर बदलने की आवश्यकता है। मैंने इसे निम्नलिखित कोड के साथ पूरा किया:
df_test = df_pull.set_index('Time').index.astype('datetime64[ns]')
df_test.tz_localize('UTC').tz_convert('US/Eastern')
और इसने मुझे मातम में डाल दिया है।
- समस्या 1: मुझे लगता है कि मेरे अन्य कॉलमों को डेटाइमइंडेक्स बनाने की प्रक्रिया में नष्ट कर दिया गया है - मैं उन्हें कैसे वापस ले सकता हूं?
- समस्या 2: DateTimeIndex किसी DateTime ऑब्जेक्ट के समान नहीं है, और मुझे नहीं लगता कि मैं उन्हें तब तक मर्ज कर सकता हूं जब तक कि मैं DateTimeIndex को डेटटाइम ऑब्जेक्ट में वापस नहीं बनाता।
जवाब
इंटरनेट पर बहुत सारे उपद्रव के बाद, मैंने अपनी समस्या हल कर ली!
# CREATE a DateTimeIndex
pull_index = df_pull.set_index('Time').index.astype('datetime64[ns]')
# Localize time with tz
pull_index = pull_index.tz_localize('UTC').tz_convert('US/Eastern')
# Back to an naive datetimeindex! https://stackoverflow.com/questions/36292959/pandas-merge-data-frames-on-datetime-index
pull_index = pull_index.tz_localize(None)
print(pull_index)
# Create a datetimeindex for the other dataset
load_index = df_load.set_index('Time').index.astype('datetime64[ns]')
print(load_index)
# Add datetimeindex to datasets and delete extra columns
df_pull=df_pull.set_index(pull_index)
df_pull.drop("Time",axis=1,inplace=True)
print(df_pull)
df_load=df_load.set_index(load_index)
df_load.drop("Time",axis=1,inplace=True)
print(df_load)
# Merge by datetimeindex
merge=pd.merge(df_pull,df_load, how='inner', left_index=True, right_index=True)