gpt4 book ai didi

python - Pandas 从索引到系列的隐式类型转换

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:40 24 4
gpt4 key购买 nike

这有效:

    s['Date'] = s.index.get_level_values('Date')
s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s['Date'])

但这并不:

    s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date'))

错误是:

pandas/index.pyx in pandas.index.IndexEngine.get_indexer_non_unique (pandas/index.c:6148)()

TypeError: 'NoneType' object is not iterable

s 是一个具有多索引的 Pandas DataFrame。

我最感兴趣的是为什么其中一个有效,而不是另一个。在我看来,两者都应该有效。

最佳答案

对我来说作品添加values用于将 Series 转换为 numpy 数组:

s['Expire Days'] = pd.to_datetime(s['Expiration']).values - 
s.index.get_level_values('Date')

示例:

import pandas as pd

s = pd.DataFrame({'Expiration': {(pd.Timestamp('2015-03-04 00:00:00'), 1): '2015-03-05',
(pd.Timestamp('2015-03-03 00:00:00'), 2): '2015-03-05'}})
s = s.rename_axis(['Date','a'])
print (s)
Expiration
Date a
2015-03-03 2 2015-03-05
2015-03-04 1 2015-03-05


s['Expire Days'] = pd.to_datetime(s['Expiration']).values -
s.index.get_level_values('Date')
print (s)
Expiration Expire Days
Date a
2015-03-04 1 2015-03-05 1 days
2015-03-03 1 2015-03-05 2 days

按评论编辑:

s['Date'] = s.index.get_level_values('Date')
s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s['Date'])

工作得很好,因为 ndarray 作为 get_level_values 的输出在Expire Days 列中转换为Series

<小时/>
s['Expire Days'] = (pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date'))

不起作用,pd.to_datetime(s['Expiration'])是Seriess.index.get_level_values('Date')ndarray。所以你需要两个 numpy 数组或两个 Series。

因为错误:

"Index._join_level on non-unique index is not implemented."

pd.to_datetime(s['Expiration']) - s.index.get_level_values('Date').to_series() 中,将两者都转换为 ndarray .

关于python - Pandas 从索引到系列的隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com