Dataframe 数据帧重新索引的问题:重新索引仅对唯一值的索引对象有效

Dataframe 数据帧重新索引的问题:重新索引仅对唯一值的索引对象有效,dataframe,pandas,reindex,Dataframe,Pandas,Reindex,当我试图在熊猫中重新索引数据帧时,我有一种非常奇怪的行为。我的Pandas版本是0.10.0,我使用Python 2.7。 基本上,当我加载数据帧时: eurusd = pd.DataFrame.load('EUR_USD_30Min.df').drop_duplicates().dropna() eurusd <class 'pandas.core.frame.DataFrame'> DatetimeIndex: 119710 entries, 2003-02-02 17:30

当我试图在熊猫中重新索引数据帧时,我有一种非常奇怪的行为。我的Pandas版本是0.10.0,我使用Python 2.7。 基本上,当我加载数据帧时:

eurusd = pd.DataFrame.load('EUR_USD_30Min.df').drop_duplicates().dropna()

eurusd

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 119710 entries, 2003-02-02 17:30:00 to 2012-12-28 17:00:00
Data columns:
open     119710  non-null values
high     119710  non-null values
low      119710  non-null values
close    119710  non-null values
dtypes: float64(4)
但是,如果我对上面的两个数据子集做同样的操作,我不会得到错误:

这是第一个子集,没有问题

eurusd[29558:29559].reindex(index=newindex)

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 192817 entries, 2002-01-01 00:00:00 to 2012-12-31 00:00:00
Freq: 30T
Data columns:
open     1  non-null values
high     1  non-null values
low      1  non-null values
close    1  non-null values
dtypes: float64(4)
eurusd[29559:29560].reindex(index=newindex)

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 192817 entries, 2002-01-01 00:00:00 to 2012-12-31 00:00:00
Freq: 30T
Data columns:
open     1  non-null values
high     1  non-null values
low      1  non-null values
close    1  non-null values
dtypes: float64(4)
欧元兑美元[29558:29559]。重新指数(指数=新指数) 日期时间索引:192817条,2002-01-01 00:00:00至2012-12-31 00:00:00 频率:30T 数据列: 打开1个非空值 高1非空值 低1非空值 关闭1个非空值 数据类型:float64(4) 这是第二个子集,仍然没有问题

eurusd[29558:29559].reindex(index=newindex)

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 192817 entries, 2002-01-01 00:00:00 to 2012-12-31 00:00:00
Freq: 30T
Data columns:
open     1  non-null values
high     1  non-null values
low      1  non-null values
close    1  non-null values
dtypes: float64(4)
eurusd[29559:29560].reindex(index=newindex)

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 192817 entries, 2002-01-01 00:00:00 to 2012-12-31 00:00:00
Freq: 30T
Data columns:
open     1  non-null values
high     1  non-null values
low      1  non-null values
close    1  non-null values
dtypes: float64(4)
欧元兑美元[29559:29560]。重新指数(指数=新指数) 日期时间索引:192817条,2002-01-01 00:00:00至2012-12-31 00:00:00 频率:30T 数据列: 打开1个非空值 高1非空值 低1非空值 关闭1个非空值 数据类型:float64(4)
我真的为此发疯了,无法理解这其中的原因。看起来数据帧从重复项和重复索引中“清除”。。。。如果需要,我可以为数据帧提供pickle文件。

您可以按索引分组并获取第一个条目(请参阅):

例如:

In [1]: df = pd.DataFrame([[1], [2]], index=[1, 1])

In [2]: df
Out[2]: 
   0
1  1
1  2

In [3]: df.groupby(level=0).first()
Out[3]: 
   0
1  1

欧元兑美元指数的输出是什么?是否唯一?(也许当时钟改变时,时间会自动重复,除非你将其包含在datetimes时区信息中)好吧,好问题!我试过了,但它确实给了我错误的答案。。。但是,这如何解释不同数据集中的不同行为呢?非常奇怪:如果我键入:eurusd[35700:35800].index.is_unique,它会为真,但如果我运行eurusd[35700:].index.is_unique,我会得到False…在
eurusd[35700:
中有一个重复的索引,一个想法是将其拆分更多以找到它:Seurusd[35700:35701]。index.is_unique为我提供了真实的欧元兑美元[35701:35800]。index.is_unique也为我提供了真实的。。。。帮助…谢谢海登,这让它工作起来!显然有一些重复的索引,尽管我真的很难在数据帧中找到它们。。。我真的不明白发生了什么…你可以通过
df.index.get_duplicates()
:)看到副本在哪里
In [1]: df = pd.DataFrame([[1], [2]], index=[1, 1])

In [2]: df
Out[2]: 
   0
1  1
1  2

In [3]: df.groupby(level=0).first()
Out[3]: 
   0
1  1