使用panda将单独的小时/分钟/秒列转换为单个时间列



我正在尝试创建一个时间列,通过对日期/时间索引重新采样,我可以创建一个时序图。然而,我很难将这些列组合成一个单独的列和/或对其进行索引。下面是我的代码和我尝试做的事情。任何建议都将不胜感激!

colnames=['time_ms','power','chisq','stations','alt','hour','min','sec','time_frac','lat','lon']
df = pd.read_csv('/data/selected_lma_matlab_20210914.txt',delim_whitespace=True, header=None, names=colnames)
#df = pd.read_csv('/data/selected_lma_matlab_20210914.txt',delim_whitespace=True, header=None,names=colnames,parse_dates=[[5, 7]], index_col=0)
#df = pd.read_csv('/data/selected_lma_matlab_20210914.txt',delim_whitespace=True, header=None,names=colnames,infer_datetime_format=True,parse_dates=[[5, 6]], index_col=0)

我确实尝试过这种方法来包括/添加日期,我认为这不是必要的,但有助于保持一致性。然而,我没能做到这一点。

s = df['hour'].mul(10000) + df['min'].mul(100) + df['sec']
df['date'] = pd.to_datetime('2021-09-14 ' + s.astype(int), format='%Y-%m-%d %H%M%S.%f')

这种方法确实可以创建一个新列,但在索引时遇到了问题

df['time'] = (pd.to_datetime(df['hour'].astype(str) + ':' + df['min'].astype(str), format='%H:%M')
.dt.time)
df['Datetime'] = pd.to_datetime(df['time'])
df.set_index('Datetime')

创建此列以获取时间序列的计数

df['tot'] = 1 

使用它对新的df中的时间序列所需的数据进行重新采样

df2 = df[['tot']].resample('5min').sum() 

然而,尽管我已经尝试过了,我还是不断地出现日期时间/索引错误。

链接到数据:https://drive.google.com/file/d/16GmXfQNMK81aAbB6C-W_Bjm2mcOVrILP/view?usp=sharing

您应该尝试将不同列中的所有数据作为字符串,连接它们,然后将其转换为datatime。下面更新的代码可以做到这一点。。。

colnames=['time_ms','power','chisq','stations','alt','hour','min','sec','time_frac','lat','lon']
df = pd.read_csv('selected_lma_matlab_20210914.txt',delim_whitespace=True, header=None, names=colnames)
df['date'] = '2021-09-14 ' + df['hour'].astype('string') + ":" + df['min'].astype('string') + ":" + df['sec'].astype('string')
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S')
df.set_index('date', inplace=True)

张贴这个你可以做你需要的绘图。我试过这些,看起来效果很好。。。

df.alt.plot(kind='line')
df.plot('lat', 'lon', kind='scatter')

最新更新