Datetime 数据帧日期时间索引Concat/Merge/Join会破坏索引顺序

Datetime 数据帧日期时间索引Concat/Merge/Join会破坏索引顺序,datetime,pandas,indexing,dataframe,corrupt,Datetime,Pandas,Indexing,Dataframe,Corrupt,考虑包含水位数据和日期时间索引的2.csv文件。可从以下位置加载: 进口情况如下: pbn61 = pd.read_csv('3844_61.csv, index_col = 0, delimiter = ';', dayfirst = True,

考虑包含水位数据和日期时间索引的2.csv文件。可从以下位置加载:

进口情况如下:

pbn61 = pd.read_csv('3844_61.csv, 
                                 index_col = 0, 
                                 delimiter = ';', 
                                 dayfirst = True, 
                                 usecols = ['Datumtijd','DisplayWaarde']
                   )
第二个文件也一样。全局变量“pbn65”

现在我想合并这两个数据帧,这样我就可以在一个图中绘制两个数据序列。原因是我有大约50个这样的文件,它们都没有相同的开始日期和/或时间。因此,合并一些将大大减少我最终得到的图形数量

现在我只想要两个系列中可用的数据,因为只有这样数据才与研究相关。因此,我使用以下代码:

我需要重命名一列,以确保它可以加入。增加最大行数以显示计数错误

这两种方法都会导致相同的问题。也就是说,索引的顺序是错误的。这可能是因为索引是表单的日期时间

DD-MM-YYYY HH:MM
加入/合并会导致熊猫计数十进制而不是日期时间

连接两个数据帧会产生以下错误:

result3 = pd.concat([pbn61,pbn65], axis = 1, join = 'inner')
result3

Shape of passed values is (2, 20424), indices imply (2, 19558)
这正好是使用merge/join生成的数据帧的长度

有办法解决这个问题吗

另外,我想保留一个DateTime索引,因为我需要一个评估的时间指示

p.p.S.大多数文件包含重复索引。尝试使用
索引。删除重复的
似乎没有任何作用。

解决方案 解释 parse_dates指定应将哪个列解析为日期

pbn61 = pbn61.groupby(level=0).first()
这将处理重复索引<代码>删除重复项
处理重复记录

result = pd.concat([pbn61, pbn65], axis=1).dropna()
这是两者的融合。我觉得这更直观。有很多方法可以做到这一点

示范

解决方案 解释 parse_dates指定应将哪个列解析为日期

pbn61 = pbn61.groupby(level=0).first()
这将处理重复索引<代码>删除重复项
处理重复记录

result = pd.concat([pbn61, pbn65], axis=1).dropna()
这是两者的融合。我觉得这更直观。有很多方法可以做到这一点

示范 @piRSquared 将numpy作为np导入 作为pd进口熊猫 导入glob pd.版本

Files = glob.glob('Peilbuizen/*.csv') 

def Invoer(F):
    F = Files
    for i in range(len(Files)):
        globals()['pbn%s' % Files[i][16:-1-3]] = pd.read_csv(Files[i], 
                                                             index_col = 0,
                                                             delimiter = ';',
                                                             dayfirst = True,
                                                             usecols = ['Datumtijd','DisplayWaarde'],
                                                             parse_dates =[0]
                                                            )

Invoer(Files)

pbn11 = pbn11.groupby(level = 0).first()
pbn13 = pbn13.groupby(level = 0).first()

result = pd.concat([pbn11, pbn13], axis = 1).dropna()
result.plot()
我将dropbox文件夹更新为10个用于实验的文件。在python保存目录中创建名为“Peilbuizen”的文件夹将创建全局文件。

@piRSquared 将numpy作为np导入 作为pd进口熊猫 导入glob pd.版本

Files = glob.glob('Peilbuizen/*.csv') 

def Invoer(F):
    F = Files
    for i in range(len(Files)):
        globals()['pbn%s' % Files[i][16:-1-3]] = pd.read_csv(Files[i], 
                                                             index_col = 0,
                                                             delimiter = ';',
                                                             dayfirst = True,
                                                             usecols = ['Datumtijd','DisplayWaarde'],
                                                             parse_dates =[0]
                                                            )

Invoer(Files)

pbn11 = pbn11.groupby(level = 0).first()
pbn13 = pbn13.groupby(level = 0).first()

result = pd.concat([pbn11, pbn13], axis = 1).dropna()
result.plot()

我将dropbox文件夹更新为10个用于实验的文件。在python保存目录中创建一个名为“Peilbuizen”的文件夹将创建全局文件。

Wow。我完全忘记了“解析日期”。那条小线把它修好了。非常感谢。但是,包含“parse_dates”会大大增加处理时间,这对吗?我有63个文件需要使用“parse_dates”进行处理,大约有20.000行。我测量了10秒和20秒,分别用了40秒和80秒。有没有更快的办法?我将发布完整的代码作为答案。哇。我完全忘记了“解析日期”。那条小线把它修好了。非常感谢。但是,包含“parse_dates”会大大增加处理时间,这对吗?我有63个文件需要使用“parse_dates”进行处理,大约有20.000行。我测量了10秒和20秒,分别用了40秒和80秒。有没有更快的办法?我将发布完整的代码作为答案。
Files = glob.glob('Peilbuizen/*.csv') 

def Invoer(F):
    F = Files
    for i in range(len(Files)):
        globals()['pbn%s' % Files[i][16:-1-3]] = pd.read_csv(Files[i], 
                                                             index_col = 0,
                                                             delimiter = ';',
                                                             dayfirst = True,
                                                             usecols = ['Datumtijd','DisplayWaarde'],
                                                             parse_dates =[0]
                                                            )

Invoer(Files)

pbn11 = pbn11.groupby(level = 0).first()
pbn13 = pbn13.groupby(level = 0).first()

result = pd.concat([pbn11, pbn13], axis = 1).dropna()
result.plot()