Datetime 数据帧日期时间索引Concat/Merge/Join会破坏索引顺序
考虑包含水位数据和日期时间索引的2.csv文件。可从以下位置加载: 进口情况如下: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,
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()