Python 如何绘制DataFrame中包含的特定日期的时间序列数据,从而可能生成单个记录
是否有任何方法可以为只包含一条记录的Python 如何绘制DataFrame中包含的特定日期的时间序列数据,从而可能生成单个记录,python,pandas,dataframe,matplotlib,Python,Pandas,Dataframe,Matplotlib,是否有任何方法可以为只包含一条记录的数据帧创建折线图 我在数据框架中拥有的示例数据:Head=['Date'、'Count1'、'Count2'、'Count3'] 01-10-2010, 100, 0 , 100 X轴:我试图在每个星期天的基础上显示日期 Y轴:所有其他3个计数 我已经提到了,但我正在试图找到一种方法,我可以创建一个记录图表 如果有人有任何示例代码,请帮助我。根据定义将单个记录打印为一行是不可能的,因为您需要两个点来定义行空间 但是,当我阅读您的问题时,您希望将一周中某一天的
数据帧
创建折线图
我在数据框架中拥有的示例数据:Head=['Date'、'Count1'、'Count2'、'Count3']
01-10-2010, 100, 0 , 100
X轴:我试图在每个星期天的基础上显示日期
Y轴:所有其他3个计数
我已经提到了,但我正在试图找到一种方法,我可以创建一个记录图表
如果有人有任何示例代码,请帮助我。根据定义将单个记录打印为一行是不可能的,因为您需要两个点来定义行空间
但是,当我阅读您的问题时,您希望将一周中某一天的数据点绘制为时间序列
如果是这种情况,您可以尝试以下方法:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
首先,让我们为您的计数生成一系列(每日)日期和一些随机数据:
dates = pd.date_range(start='1/1/2020', end='01/31/2020', freq='D')
count1 = np.random.randint(0,100,len(dates))
count2 = np.random.randint(0,100,len(dates))
count3 = np.random.randint(0,100,len(dates))
我们使用它来定义一个以日期为索引的数据框:
df = pd.DataFrame({'dates': dates, 'count1': count1, 'count2': count2, 'count3': count3})
df.set_index('dates', inplace=True)
如果只想绘制星期天的数据,我们可以使用一行代码(然后强制matplotlib绘制):
最后一个表达式使用Pandas的DateTimeIndex中的数字工作日索引,其中周一==0,周二==1,…,周日==6
这将导致以下绘图:
但是,线打印不适用于单个数据点。如果数据框中只有一个数据点,则必须将plotsstyle
属性设置为。
,该属性对应于散点图:
df[df.index.weekday==6].plot(style='.')
这也适用于单个数据点,就像我们在一周的数据范围内所做的那样:
dates = pd.date_range(start='1/1/2020', end='01/07/2020', freq='D')
count1 = np.random.randint(0,100,len(dates))
count2 = np.random.randint(0,100,len(dates))
count3 = np.random.randint(0,100,len(dates))
df = pd.DataFrame({'dates': dates, 'count1': count1, 'count2': count2, 'count3': count3})
df.set_index('dates', inplace=True)
df[df.index.weekday==6].plot(style='.')
您需要重塑数据帧:
df = pd.DataFrame([['01-10-2010',100,0,100]], columns=['Date','Count1','Count2','Count3']
df
输出:
Date Count1 Count2 Count3
0 2010-01-10 100 0 100
设置索引转换为日期时间数据类型,并使用melt
:
df['Date'] = pd.to_datetime(df['Date'])
df.melt('Date').set_index('Date').plot()
输出:
非常感谢您的回复。如果dataframe df只有1条记录,则不会生成图形?我更新了答案,为您提供了一个打印单个记录的选项。但是,这只能作为散点图进行,而不能使用线图。希望这对你有帮助。虽然我有数字列,但我得到一个错误:TypeError:没有要打印的数字数据。我能找到什么方法吗?我可以在这个答案中问一个疑问。由于np.随机生成,数据帧大约有7条记录。但我有1条记录,我无法创建散点图。如果我提供**pd.date\u范围(start='1/1/2020',end='1/01/2020',freq='D'),我得到的是TypeError:Empty'DataFrame':没有要绘图的数字数据此数据的图表应该是什么样的?一条垂直线?@ScottBoston。。是的,斯科特@我可以知道有没有可能得到两行用于Count1和Count3的数据吗?@因为我得到的是空白的完整图形,我无法得到lineCheck数据类型。确保它们是数字(int)或(float)@我可以知道有没有可能得到两条线,分别代表Count1和Count3?一条线需要两个点,每个点对应一个点。
df['Date'] = pd.to_datetime(df['Date'])
df.melt('Date').set_index('Date').plot()