如何通过构造简单的 pandas 系列来定义正确的索引?

How to define a correct index by constructing simple pandas Series?

我有以下 python 词典:

sdata ={'Ohio': 35000, 'Oregon': 16000, 'Texas': 71000, 'Utah': 5000}

假设我想从这本词典创建 pandas 系列。出于某些原因,我想用额外的列构建系列:

states = ['California', 'Damascus','Ohio', 'Oregon', 'Texas','Regensburg', 'Munich']
obj4 = pd.Series(sdata, index=states)
obj4

输出将是:

California        NaN
Damascus          NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
Regensburg        NaN
Munich            NaN
dtype: float64

在这种情况下,在 sdata 中找到的 3 个值被放置在适当的位置,但是由于 没有 CaliforniaDamascusRegensburgMunich 被发现,它们显示为 NaN。 换句话说,在 sdata 中没有对应值的索引将显示为 NaN.

但是,当我尝试从列表创建系列时它不起作用:

labels = ['Covid', 'Delta', 'Omicron', 'Mu']
obj2 = pd.Series([1.5, -2.5, 0], index=labels) 
obj2

错误信息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-87-3f289c72627f> in <module>()
      1 # use the above created index object as an index in this Serie
----> 2 obj2 = pd.Series([1.5, -2.5, 0], index=labels)
      3 obj2

/usr/local/lib/python3.7/dist-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
    312                     if len(index) != len(data):
    313                         raise ValueError(
--> 314                             f"Length of passed values is {len(data)}, "
    315                             f"index implies {len(index)}."
    316                         )

ValueError: Length of passed values is 3, index implies 4.

我不明白为什么我会收到此消息错误,尽管它允许创建具有 NaN 值的系列,如第一种情况?

提前致谢!

仅对字典使用 pd.Series,然后添加 Series.reindex:

obj4 = pd.Series(sdata).reindex(states)

如果按列表创建是必需的,那么索引的长度必须与数据列表相同,例如对于 3 的长度,过滤列表 labels:

的前 3 个值
labels = ['Covid', 'Delta', 'Omicron', 'Mu']
obj2 = pd.Series([1.5, -2.5, 0], index=labels[:3]).reindex(labels)