如何通过构造简单的 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 个值被放置在适当的位置,但是由于 没有 California
、Damascus
、Regensburg
和 Munich
被发现,它们显示为 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)
我有以下 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 个值被放置在适当的位置,但是由于 没有 California
、Damascus
、Regensburg
和 Munich
被发现,它们显示为 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
:
labels = ['Covid', 'Delta', 'Omicron', 'Mu']
obj2 = pd.Series([1.5, -2.5, 0], index=labels[:3]).reindex(labels)