Python 数据帧创建-重新索引

Python 数据帧创建-重新索引,python,numpy,dictionary,pandas,Python,Numpy,Dictionary,Pandas,我在《熊猫》中不断发现这个错误: raise Exception('Reindexing only valid with uniquely valued Index ' Exception: Reindexing only valid with uniquely valued Index objects 我理解,如果试图从字典中生成DataFrame时列名相同,就会发生这种情况 然而,我的不是 这是我正在使用的字典-看起来像这样-非常像教程中给出的,不起作用: d = {'Sample1':

我在《熊猫》中不断发现这个错误:

raise Exception('Reindexing only valid with uniquely valued Index '
Exception: Reindexing only valid with uniquely valued Index objects
我理解,如果试图从字典中生成
DataFrame
时列名相同,就会发生这种情况

然而,我的不是

这是我正在使用的字典-看起来像这样-非常像教程中给出的,不起作用:

d = {'Sample1': 4.121025    0.306828
4.119957    0.335473
4.096208    0.331831
...
0.824808    0.366679
0.745721    0.586742
Length: 406, 'Sample2': 3.444444    0.937468
3.315508    0.855920
...
0.928144    0.236640
0.918519    0.232346
Length: 991}
这是我用来生成此词典的代码,其中一些细节并不相关,但spec.Y和spec.X只是numpy数组:

d = dict()
for tab in self.tab_list:
    spec = tab.temp_spectra
    name = str(spec.spectra_name)
    d[name] = pd.Series(spec.Y, index=spec.X)
    print(name)
print(d)
df = pd.DataFrame(d)
print(df)
你知道为什么会出现这个错误,这样我就可以知道该怎么解决了吗?列名似乎不是它,我是在假设索引可以匹配或不匹配的情况下操作的-这不重要-这就是为什么我要使用这个包。我想要“hashtable”类型的感觉,X数组可以不同,也可以相同,重叠将把值放在同一行中,或者如果需要,创建一个新行,以便可以一起查看

编辑:

我发现解决方案与我的一个数据集的索引中的一个重复条目有关(我的一个数据集是通过手工跟踪在plotly上创建的,因此一个X值有两个Y值)。
在回答我自己的问题时,我将举几个例子。

始终检查一个X值是否有两个Y值,或者一个数据帧的每个索引是否有两个值。 我通过在plotly上手动跟踪一个图形并创建数据,得到了其中一个数据集,该数据集为一个X提供了2y值

举例说明: 下面是一个可编译的小脚本:

import pandas as pd
import numpy as np

def f(i):
    return np.random.rand(i,)

# number of points in two spectra (two separate spectra of different length)
# possibly obtained on different equipment such that the pixels/values don't align
n1 = 450
n2 = 950
X1 = np.sort(f(n1))
X2 = np.sort(f(n2))
Y1 = f(n1)
Y2 = f(n2)

# make dataframe from the spectra
d = dict()
d['1'] = pd.Series(Y1, index=X1)
d['2'] = pd.Series(Y2, index=X2)
print(d)
df = pd.DataFrame(d)
print(df)
这里有一个不是,并返回我得到的错误:

import pandas as pd
import numpy as np

def f(i):
    return np.random.rand(i,)

# number of points in two spectra (two separate spectra of different length)
# possibly obtained on different equipment such that the pixels/values don't align
n1 = 450
n2 = 950
# store X array to duplicate a value within it
X_ = f(n1)
X1 = np.sort(np.append(X_,X_[0]))
X2 = np.sort(f(n2))
Y_ = f(n1)
Y1 = np.append(Y_,Y_[0])
Y2 = f(n2)

# make dataframe from the spectra
d = dict()
d['1'] = pd.Series(Y1, index=X1)
d['2'] = pd.Series(Y2, index=X2)
print(d)
df = pd.DataFrame(d)
print(df)

你能提供一个重复的例子来说明错误吗?谢谢你的评论!我通常准备一个小的可编译的示例来尝试复制错误,但这次我无法找出错误所在,因为我编写的小的可编译脚本可以完全工作。因此,这是我的特定数据类型或一些神秘的东西,我还没有弄明白。我希望有人对这类问题有经验或见解,能提出一些建议。我现在正在添加一个小的可编译脚本。