Python 2.7 按时间顺序合并插入行,保留多个数据集的所有数据帧

Python 2.7 按时间顺序合并插入行,保留多个数据集的所有数据帧,python-2.7,pandas,Python 2.7,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

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

    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
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 
根据耶斯雷尔的建议:

#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 
日期时间

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 

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

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 
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会一个接一个地连接起来。如果没有数据,则很难找到错误。但似乎您的数据帧只有第一列datetime。可以检查吗?所有数据帧都由相同的函数处理,因此具有完全相同的coulmns。索引实际上是datetime。你能解释一下你的坏数据输出吗?例如:19.0.55时的df3帧不在正确的位置,连接输出中的df2帧也不在正确的位置。@Julien:除了Jezrael提出的concate之外,还有几个方法,包括df1.merge(df2,on=“datetime”).merge(df3,on=“datetime”)