首页 > 解决方案 > 熊猫将唯一日期显示为重复

问题描述

我正在尝试阅读一系列时间,其中有一些空白,所以我试图填补空白。我以前做过,但是有了这个数据集,pandas 似乎看到了似乎是唯一的日期时间的重复项。

当我尝试在不分配索引或解析日期的情况下读取 csv 时,检查重复项时显示无:

import pandas as pd
import numpy as np

df = pd.read_csv("/home/dewy/Desktop/euro/strip.csv",names=['time','open','high','low','close','volume'])#, index_col='time', parse_dates=True)
df[df.duplicated()]

输出是:

time    open    high    low     close   volume

一张空白表。

当我检查重复项只是为了“时间”

df[df.duplicated(subset='time')]

我得到了两个重复,虽然它似乎是说 3:59 等于 4:00。

                time                 open        high         low        close      volume
1255854     2012-11-21 03:59:00     1.27703     1.27703     1.27672     1.27672     2
1255855     2012-11-21 04:00:00     1.27666     1.27669     1.27531     1.27537     1211

当我 read_csv 并命名索引和 parse_dates 时,会出现更多重复项

df = pd.read_csv("/home/dewy/Desktop/euro/strip.csv",names=['time','open','high','low','close','volume'], index_col='time', parse_dates=True)
df[df.duplicated()]

[输出]:

                         open        high        low         close   volume
      time                  
2009-05-01 04:01:00     1.32549     1.32549     1.32547     1.32548     3
2009-05-03 21:57:00     1.32827     1.32827     1.32827     1.32827     2
2009-05-05 22:33:00     1.33155     1.33155     1.33150     1.33155     3
2009-05-07 21:24:00     1.33976     1.33980     1.33976     1.33980     2 
...
2014-02-21 05:35:00     1.37179     1.37179     1.37179     1.37179     3
2014-02-21 08:48:00     1.37125     1.37125     1.37117     1.37117     18
2014-02-21 11:12:00     1.37089     1.37093     1.37089     1.37093     12
2014-02-21 19:37:00     1.37409     1.37409     1.37409     1.37409     2

总共有 2837 行重复。

如果我首先导入而不命名索引和解析日期,然后设置 to_datetime 和 set_index 之后,就会发生同样的事情。

对我来说似乎表现得很奇怪,有什么想法吗?谢谢

标签: pythonpandas

解决方案


默认情况下 df.duplicated 的输出将保留第一个实例并仅返回其他重复项。当您这样做时,您会得到两个重复项,这并不是说这两个是彼此的重复项。它说这两个记录已经被看到,所以这两个是另外两个记录的副本。keep=False如果您想查看所有重复记录,请尝试在对重复项的调用中进行设置。

import pandas as pd
names = ['chris','adam','chris','sam','adam','david']
df = pd.DataFrame(names)
print(df)
print(df[df.duplicated()])
print(df[df.duplicated(keep=False)])

PRINT1 - 整个数据框

       0
0  chris
1   adam
2  chris
3    sam
4   adam
5  david

PRINT2 - df.duplicate() 默认首先使用。这并不是说克里斯是亚当的复制品。它的说法克里斯和亚当已经被看到

       0
2  chris
4   adam

PRINT3 - 将 keep=False 传递给 df.dupicates 以便我们看到所有重复的记录

       0
0  chris
1   adam
2  chris
4   adam

推荐阅读