gpt4 book ai didi

python - 通过带有 MultiIndex 的 .at 从 pd.DataFrame 选择显式单元格

转载 作者:行者123 更新时间:2023-12-02 18:35:54 26 4
gpt4 key购买 nike

我有一个基于 MultiIndex 的 pd.DataFrame:

import pandas as pd
data = pd.DataFrame([[2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13]], index=pd.MultiIndex.from_tuples([
(pd.Timestamp('2019-07-01 23:00:00'), pd.Timestamp('2019-07-01 23:00:00'), 0),
(pd.Timestamp('2019-07-02 00:00:00'), pd.Timestamp('2019-07-02 00:00:00'), 0),
(pd.Timestamp('2019-07-02 00:00:00'), pd.Timestamp('2019-07-02 00:00:00'), 0),
(pd.Timestamp('2019-07-02 01:00:00'), pd.Timestamp('2019-07-02 01:00:00'), 0),
(pd.Timestamp('2019-07-02 02:00:00'), pd.Timestamp('2019-07-02 02:00:00'), 0),
(pd.Timestamp('2019-07-02 03:00:00'), pd.Timestamp('2019-07-02 03:00:00'), 0)],
names=['dt_calc', 'dt_fore', 'positional_index']), columns=['temp', 'temp_2'])

现在我想用列表对象替换单元格(之前将 DataFrame 类型转换为对象):

idx = data.index[0]
data.at[idx, 'temp'] = [1,2,3]

这将产生:

ValueError                                Traceback (most recent call last)
/app/generic_model/modules/feature_engineering/lstm_pre_processing.py in <module>
----> 1 data.at[idx, 'temp']

/usr/local/lib/python3.8/dist-packages/pandas/core/indexing.py in __getitem__(self, key)
2151 # GH#33041 fall back to .loc
2152 if not isinstance(key, tuple) or not all(is_scalar(x) for x in key):
-> 2153 raise ValueError("Invalid call for scalar access (getting)!")
2154 return self.obj.loc[key]
2155

ValueError: Invalid call for scalar access (getting)!

我不知道问题是什么,因为使用 .loc 工作正常。但是使用 .loc 我无法替换单元格值。在这种情况下,错误消息并没有多大帮助。

我正在 python 3.8 上运行 pd.__version__: 1.2.2

最佳答案

我们仍然可以使用 loc 来分配单个单元格值,方法是创建与需要更新的单元格对应的具有相同索引的中间序列。附带说明一下,将复杂对象存储在 pandas 列中通常不是一个好的做法,因为您将失去矢量化的好处。

data.loc[idx, 'temp'] = pd.Series([[1, 2, 3]], index=[idx])

                                                               temp  temp_2
dt_calc dt_fore positional_index
2019-07-01 23:00:00 2019-07-01 23:00:00 0 [1, 2, 3] 3
2019-07-02 00:00:00 2019-07-02 00:00:00 0 4 5
0 6 7
2019-07-02 01:00:00 2019-07-02 01:00:00 0 8 9
2019-07-02 02:00:00 2019-07-02 02:00:00 0 10 11
2019-07-02 03:00:00 2019-07-02 03:00:00 0 12 13

关于python - 通过带有 MultiIndex 的 .at 从 pd.DataFrame 选择显式单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68790081/

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