Dataframe 数据帧重新索引的问题:重新索引仅对唯一值的索引对象有效
当我试图在熊猫中重新索引数据帧时,我有一种非常奇怪的行为。我的Pandas版本是0.10.0,我使用Python 2.7。 基本上,当我加载数据帧时: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
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