在pandas中,我的数据框具有以下结构:
raw_data = {'date': ['1975-07-03','1975-07-03','1975-07-04','1975-08-01'],
'time': [515,1014,1401,1201], 'value': [1,-1,2,11]}
df = pd.DataFrame(raw_data, columns = ['date', 'time', 'value'])
这个问题与this类似,但我无法弄清楚如何修改它。
我需要在列“value”中绘制值,而不是两列“date”和“time”。请注意,此处“time”确实是 hh:mm 。
修改
由于年份在x轴上没有变化,我应该以“月 - 小时:分钟”格式提供日期和时间
答案 0 :(得分:1)
IIUC:
(df.assign(date=pd.to_datetime(df['date'] + ' ' + df['time'].astype(str).replace(r'(\d){2})(\d{2})', r'\1:\2')))
.plot(x='date', y='value'))
答案 1 :(得分:0)
扩展另一个答案,包括将特定数据点标记为ticklabels / ticks,可以使用date2num将日期转换为其刻度位置。可能有更好的方法来操作matplotlib中的日期格式,但这种方法可行。
编辑:如果少于4个字符,请确保填充hhmm,更多ideomatic pandas
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
raw_data = {'date': ['1975-07-03','1975-07-03','1975-07-04','1975-08-01'],
'time': [415,1014,1401,1201], 'value': [1,-1,2,11]}
def fix_time_str(df):
df['date'] = (df['date'] + ' ' +
df['time'].apply(lambda x: str(x).zfill(4)).replace(r'(\d){2})(\d{2})', r'\1:\2'))
return df
df = (pd.DataFrame(raw_data, columns = ['date', 'time', 'value'])).pipe(fix_time_str).assign(date= lambda x: pd.to_datetime(x['date']))
fig, ax = plt.subplots(1,1, figsize = (8,5))
xtick_locs = mpl.dates.date2num(df['date'].tolist())
xtick_labels = df['date'].astype(str).tolist()
xtick_labels = ["{}-{}".format(*i.split('-')[1:])[:-3] for i in xtick_labels]
ax.plot(df['date'], df['value'])
ax.set_xticks(xtick_locs)
ax.set_xticklabels(xtick_labels)
ax.tick_params(axis='x', rotation=90)