熊猫显示重复的唯一日期

时间:2019-07-31 15:58:15

标签: python 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行重复项。

如果我第一次导入时没有命名索引和解析日期,然后在之后将其设置为_datetime和set_index,则会发生相同的事情。

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

2 个答案:

答案 0 :(得分:2)

默认情况下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-将def = False传递给df.dupicates,以便我们查看所有具有重复的记录

       0
0  chris
1   adam
2  chris
4   adam

答案 1 :(得分:2)

似乎熊猫的行为应有尽有。有关详细信息,请参见DataFrame.duplicated

1)完全重复:

strerror(errno)检查所有单元格。如果每一行即使每个单元格都不同,那么我们希望不会重复。

2)时间重复

当您呼叫df[df.duplicated()]时,熊猫默认使用选项df.duplicated(subset="time")。使用keep="first"查看所有重复项。 这应该可以解决您的问题。

3)时间索引重复

将索引设置为keep=False后,time仅查看您的df.duplicatedopenhighlowclose),而不是 index volume),这应该解释time重复项。