如何从“ YYYY-MM-DD HR-MN-SEC”格式提取日期时间数据为“ MM-DD HR-MN-SEC”格式?

时间:2019-04-19 16:00:40

标签: python pandas dataframe time-series

我正在分析时间序列问题,并且我有'YYYY-MM-DD HR-MN-SEC'格式的数据。

我想将数据转换为'MM-DD HR-MN-SEC'格式。简而言之,我想删除年份数据。转换后,我希望数据为 datetime 格式,而不是字符串格式。

我尝试拆分数据,但是它返回一个字符串。我希望在同一列中使用相同格式的数据。 这是我下面的代码:

#slicing 2016 data

df8=df1.loc['2016',['humidity','pressure','temp']]

#removing outliers

df8=df8[(np.abs(stats.zscore(df8)) < 3).all(axis=1)]

df8.head()

                     humidity      pressure       temp

datetime_utc 

2016-01-01 00:00:00   100.0         1020.0         8.0
2016-01-01 03:00:00    94.0         1022.0        10.0
2016-01-01 06:00:00    51.0         1022.0        20.0
2016-01-01 09:00:00    32.0         1019.0        23.0

转换后,我希望数据框看起来像这样。期待获得帮助。

                     humidity      pressure       temp

datetime_utc 

01-01 00:00:00       100.0         1020.0         8.0
01-01 03:00:00        94.0         1022.0        10.0
01-01 06:00:00        51.0         1022.0        20.0
01-01 09:00:00        32.0         1019.0        23.0

1 个答案:

答案 0 :(得分:0)

如上所述,Datetime必须有一年。当然可以将它们全部设置为0,然后将其忽略。

但是这个问题是关于按月,按小时等方式处理索引的问题。

某些策略将与PeriodIndexTimedeltaIndex一起使用。或将数据容忍为字符串。然后是Grouper(freq=)

这是一个忙碌的盒子。祝您分析时间序列数据好运。

import pandas as pd

# period index strategy
df = pd.DataFrame({"y": [1,2,3,4,5]}, pd.to_datetime(["2000-03-31 00:00:00", "2000-05-31 00:00:00", "2000-08-31 00:00:00", "2000-11-30 00:00:00", "2001-01-31 00:00:00"]))
df.index = df.index.to_period("D")
print(df)

# timedelta strategy
df = pd.DataFrame({"y": [1,2,3,4,5]}, pd.to_datetime(["2000-03-31 00:00:00", "2000-05-31 00:00:00", "2000-08-31 00:00:00", "2000-11-30 00:00:00", "2001-01-31 00:00:00"]))
timedeltas = df.index.to_series().diff()
df['timedeltas'] = timedeltas
df['days'] = df['timedeltas'].apply(lambda x:x.days)
df['hours'] = df['timedeltas'].apply(lambda x:x.seconds/3600)
df.set_index(['days', 'hours'], inplace=True)
print(df)

# string strategy
df = pd.DataFrame({"y": [1,2,3,4,5]}, pd.to_datetime(["2000-03-31 00:00:00", "2000-05-31 00:00:00", "2000-08-31 00:00:00", "2000-11-30 00:00:00", "2001-01-31 00:00:00"]))
df['month'] = df.index.month
df['day'] = df.index.day
df.set_index(['month', 'day'], inplace=True)
print(df)

# time grouping
df = pd.DataFrame({"y": [1,2,3,4,5]}, pd.to_datetime(["2000-03-31 00:00:00", "2000-05-31 00:00:00", "2000-08-31 00:00:00", "2000-11-30 00:00:00", "2001-01-31 00:00:00"]))
data = df.groupby(pd.Grouper(freq='M')).count()
print (data)