我正在尝试阅读一系列文章,其中有些空白,因此我试图填补空白。我之前已经做过,但是有了这个数据集,熊猫似乎看到了唯一的日期时间重复。
当我尝试在不分配索引或解析日期的情况下读取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,则会发生相同的事情。
似乎对我来说很奇怪,有什么想法吗?谢谢
答案 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。
strerror(errno)
检查所有单元格。如果每一行即使每个单元格都不同,那么我们希望不会重复。
当您呼叫df[df.duplicated()]
时,熊猫默认使用选项df.duplicated(subset="time")
。使用keep="first"
查看所有重复项。 这应该可以解决您的问题。
将索引设置为keep=False
后,time
仅查看您的列(df.duplicated
,open
,high
,low
,close
),而不是 index (volume
),这应该解释time
重复项。