【问题标题】:Merge insert row wise on time coulmn , keep all the data frames of multiple data set在时间列上合并插入行,保留多个数据集的所有数据帧
【发布时间】:2018-03-22 19:41:17
【问题描述】:

我是 pandas 的新手,关注了许多文档和线程,但没有找到解决方案。我必须合并三个不同的数据集。数据集有时间戳。我必须合并数据集,以便帧按时间顺序排列。请帮忙。

    df1=
    2017-09-28 19:00:48.035883   116.035883 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
    2017-09-28 19:00:53.035358   121.035358 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9
    2017-09-28 19:00:53.035596   121.035596 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
    2017-09-28 19:00:58.035314   126.035314 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9
    2017-09-28 19:00:58.035796   126.035796 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
    2017-09-28 19:00:59.856818   127.856818 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9

    df2=
    2017-09-28 19:00:55.168703  [ RESPONSE ]   37 f4 67 13 4e d6 02 b2 59 c2 e6 82
    2017-09-28 19:00:55.182446  [  REQUEST ]   f4 37 27 14 00 00 00 20 51 ef e2 0d f1
    2017-09-28 19:00:55.213749  [ RESPONSE ]   37 f4 7f 27 78
    2017-09-28 19:00:55.274877  [ RESPONSE ]   37 f4 67 14
    2017-09-28 19:00:55.283833  [  REQUEST ]   f4 37 31 01 0f 1f 04

    df3=
    2017-09-28 19:00:55.069731 145077 107.6890 231   NM_ReadySleepState
    2017-09-28 19:00:55.069792 145078 107.6890 232   NM_ReadySleepState
    2017-09-28 19:00:55.120177 145079 107.7420 233   SW2 heartbeat
    2017-09-28 19:00:55.190568 145080 107.8080 234   SW1 heartbeat

merged=
2017-09-28 19:00:48.035883   116.035883 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
2017-09-28 19:00:53.035358   121.035358 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9
2017-09-28 19:00:53.035596   121.035596 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
2017-09-28 19:00:55.069731 145077 107.6890 231   NM_ReadySleepState
2017-09-28 19:00:55.069792 145078 107.6890 232   NM_ReadySleepState
2017-09-28 19:00:55.120177 145079 107.7420 233   SW2 heartbeat
2017-09-28 19:00:55.168703  [ RESPONSE ]   37 f4 67 13 4e d6 02 b2 59 c2 e6 82
2017-09-28 19:00:55.182446  [  REQUEST ]   f4 37 27 14 00 00 00 20 51 ef e2 0d f1
2017-09-28 19:00:55.190568 145080 107.8080 234   SW1 heartbeat
2017-09-28 19:00:55.213749  [ RESPONSE ]   37 f4 7f 27 78
2017-09-28 19:00:55.274877  [ RESPONSE ]   37 f4 67 14
2017-09-28 19:00:55.283833  [  REQUEST ]   f4 37 31 01 0f 1f 04
2017-09-28 19:00:58.035314   126.035314 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9
2017-09-28 19:00:58.035796   126.035796 2  5B7             Rx   d 8 FA 02 C2 FF FC CF FF C2
2017-09-28 19:00:59.856818   127.856818 2  5B7             Rx   d 8 F9 02 F2 02 FF FF FF F9

在 Jezrael 的建议下:

#set_index("DateTime") for all
mixDfs=[df1,df2,df3]
mix= pd.concat(mixDfs)
print list(mix)
print mix.head(10)
['Data', 'DateTime_string']
                                                                     Data  \

日期时间

2017-09-28 19:00:48.035883    116.035883 2  5B7             Rx   d 8 FA 02...   
2017-09-28 19:00:53.035358    121.035358 2  5B7             Rx   d 8 F9 02...   
2017-09-28 19:00:53.035596    121.035596 2  5B7             Rx   d 8 FA 02...   
2017-09-28 19:00:58.035314    126.035314 2  5B7             Rx   d 8 F9 02...   
2017-09-28 19:00:58.035796    126.035796 2  5B7             Rx   d 8 FA 02...   
2017-09-28 19:00:59.856818    127.856818 2  5B7             Rx   d 8 F9 02...   
2017-09-28 19:00:55.069731           145077 107.6890 231   NM_ReadySleepState   
2017-09-28 19:00:55.069792           145078 107.6890 232   NM_ReadySleepState   
2017-09-28 19:00:55.120177                145079 107.7420 233   SW2 heartbeat   
2017-09-28 19:00:55.190568                145080 107.8080 234   SW1 heartbeat   

                                       DateTime_string  
DateTime                                                
2017-09-28 19:00:48.035883  2017-09-28 19:00:48.035883  
2017-09-28 19:00:53.035358  2017-09-28 19:00:53.035358  
2017-09-28 19:00:53.035596  2017-09-28 19:00:53.035596  
2017-09-28 19:00:58.035314  2017-09-28 19:00:58.035314  
2017-09-28 19:00:58.035796  2017-09-28 19:00:58.035796  
2017-09-28 19:00:59.856818  2017-09-28 19:00:59.856818  
2017-09-28 19:00:55.069731  2017-09-28 19:00:55.069731  
2017-09-28 19:00:55.069792  2017-09-28 19:00:55.069792  
2017-09-28 19:00:55.120177  2017-09-28 19:00:55.120177  
2017-09-28 19:00:55.190568  2017-09-28 19:00:55.190568 

【问题讨论】:

  • @ Julien : 除了 Jezrael 提出的 concate 之外,还有几种方法,包括 df1.merge(df2,on="DateTime").merge(df3,on="DateTime")

标签: python-2.7 pandas


【解决方案1】:

我认为您需要从第一列创建 DatetimeIndex,然后使用 concat - 每个 DataFrame 中的第一列也必须只包含日期时间。

dfs = [df1, df2, df3]
dfs = [pd.to_datetime(x.set_index(df.columns[0])) for x in dfs]

df = pd.concat(dfs).sort_index()

【讨论】:

  • 它没有用。而是将 dfs 一个接一个地连接起来。
  • 没有你的数据很难找到错误。但似乎您的数据框只有第一列日期时间。可以查吗?
  • 所有数据帧都由同一个函数处理,因此具有完全相同的列。索引实际上是日期时间。
  • 你能解释一下你的不良数据输出吗?
  • 示例:19.0.55 时间的 df3 帧不在正确的位置,连接输出中的 df2 帧也是如此。
猜你喜欢
  • 2021-09-08
  • 1970-01-01
  • 2021-10-10
  • 2021-01-15
  • 2016-01-10
  • 2023-01-20
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多