【问题标题】:Datatime series plotting with different start date具有不同开始日期的数据时间序列图
【发布时间】:2020-07-02 21:23:58
【问题描述】:

我有一些数据库表保存在不同的 CSV 文件/DataFrame 中,每个 DF 有几个月的数据。 使用 matplotlib 绘制数据图形。当 Rank1 的任何表填充了所有值时,它会绘制所有数据,但是如果 Rank1 表的行数很少,则图形只占用与表一样多的行。

我提取了一些 DF 样本来显示问题,时间列是链接 DF 的数据时间序列:

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的sn-p是

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

感谢您的提示

【问题讨论】:

  • 感谢您提供示例数据和预期输出。 +1

标签: python pandas dataframe matplotlib


【解决方案1】:

构建数据框列表,然后使用 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)

【讨论】:

  • 我在列表理解中收到了KeyError: 0。我提取了 DF1 pd.DataFrame.from_records(df1[1:],index='time',columns=df1[0]) 的表达式并得到了同样的错误。 这是您尝试处理的内容吗?
  • 我的错误。我不得不重建你的数据。为此,我需要 .from_records。您只需要确保每个数据帧都有时间作为索引。我修改了答案。
猜你喜欢
  • 2020-01-25
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2022-01-21
  • 2019-03-07
相关资源
最近更新 更多