具有不同开始日期的数据时间序列图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有不同开始日期的数据时间序列图相关的知识,希望对你有一定的参考价值。

我有一些数据库表保存在不同的CSV文件/ DataFrame中,每个DF都有数月的数据。通过数据,使用matplotlib绘制图形。当Rank1的任何表的所有值均已填充时,它将绘制所有数据,但是,如果Rank1表的行很少,则图形仅占用与表相同的行。

enter image description here

我提取了一些DF示例以显示问题,时间列是连接DF的datatime系列:

df1 = [index,time],
[0,2020-03-21 01:20:00],
[1,2020-03-21 02:20:00],
[2,2020-03-21 03:20:00],
[3,2020-03-21 04:20:00],
[4,2020-03-21 05:20:00],
[5,2020-03-21 06:20:00],
[6,2020-03-21 07:20:00]]

df2 = [[index,time,8LYCUG89Q],
[1,2020-03-21 02:20:00,5939],
[2,2020-03-21 03:20:00,6000],
[3,2020-03-21 04:20:00,6000]]

df3 = [[index,time,P99YQPU0R],
[0,2020-03-20 23:20:00,5709],
[1,2020-03-21 00:20:00,5709],
[2,2020-03-21 01:20:00,5709],
[3,2020-03-21 02:20:00,5709],
[4,2020-03-21 03:20:00,5709],
[5,2020-03-21 04:20:00,5709],
[6,2020-03-21 05:20:00,5709]]

df4 = [[index,time,90QCVGVPG],
[0,2020-03-20 23:20:00,5611],
[1,2020-03-21 00:20:00,NaN],
[2,2020-03-21 01:20:00,5611],
[3,2020-03-21 02:20:00,5611],
[4,2020-03-21 03:20:00,NaN],
[5,2020-03-21 04:20:00,5611],
[6,2020-03-21 05:20:00,5611]]

df5 = [[index,time,LLQ9URY], 
[0,2020-03-20 23:20:00,NaN],
[1,2020-03-21 00:20:00,5603],
[2,2020-03-21 01:20:00,5603],
[3,2020-03-21 02:20:00,5603],
[4,2020-03-21 03:20:00,5576],
[5,2020-03-21 04:20:00,5576],
[6,2020-03-21 05:20:00,NaN]]

df6 = [[index,time,UV0R8U0],
[0,2020-03-20 23:20:00,5545],
[1,2020-03-21 00:20:00,5545],
[2,2020-03-21 01:20:00,5545],
[3,2020-03-21 02:20:00,5545],
[4,2020-03-21 03:20:00,5545],
[5,2020-03-21 04:20:00,5545],
[6,2020-03-21 05:20:00,5545]]

对于DF结果,如果表格实际上未从DF1的时间列中填充,则我希望获得具有Rank1的NaN值的DF,例如:

index   time                8LYCUG89Q   P99YQPU0R   90QCVGVPG   LLQ9URY UV0R8U0
0       2020-03-20 23:20:00 NaN         5709        5611        NaN     5545
1       2020-03-21 00:20:00 NaN         5709        NaN         5603    5545
2       2020-03-21 01:20:00 NaN         5709        5611        5603    5545
3       2020-03-21 02:20:00 NaN         5709        5611        5603    5545
4       2020-03-21 03:20:00 5939        5709        NaN         5576    5545
5       2020-03-21 04:20:00 6000        5709        5611        5576    5545
6       2020-03-21 05:20:00 6000        5709        5611        NaN     5545

获得最终DF的代码段是

colnametop = ['8LYCUG89Q', 'P99YQPU0R', '90QCVGVPG', 'LLQ9URY', 'UV0R8U0']
finaltop_df = pd.DataFrame(columns=['time'])
for i in colnametop:
    memdata = pd.read_csv("file_path",i),usecols=['time','data'],parse_dates=['time']).rename(columns='data':i)
    finaltop_df = pd.merge(finaltop_df,memdata,on='time')
finaltop_df

[结果是DF,在上面我在下面评论过,它仅获取DF2上的数据,并从df1丢弃了任何数据时间,即使Rank2〜Rank4都没有填充它。

最终图形的结果在数据显示中丢失。

index   time                8LYCUG89Q   P99YQPU0R   90QCVGVPG   LLQ9URY UV0R8U0
0       2020-03-21 03:20:00 5939        5709        NaN         5576    5545
1       2020-03-21 04:20:00 6000        5709        5611        5576    5545
2       2020-03-21 05:20:00 6000        5709        5611        NaN     5545

感谢您的提示

答案

构建数据帧列表,然后使用pd.concat。

df_list = [df1, df2, df3, df4, df5, df6]  # You need a list of dataframes
df_list2 = []
for df in df_list:
    # df = df.reset_index()  # Maybe you have to reset your index first because of your first dataframe with no data.
    df = df.set_index('time')
    df2_list2.append(df)
df = pd.concat(df_list2, sort=True)

以上是关于具有不同开始日期的数据时间序列图的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:填写每个实体具有不同日期范围的缺失日期

如何绘制具有许多 MaN 的时间序列?

将不同单元格中具有两个日期的数据集转换为系列或序列(Google 工作表)

Python合并两个具有不同日期时间的数据框[重复]

具有日期时间和散点图交互的绘图破折号范围滑块

具有多列的 matplotlib 条形图,x 轴上的日期