gpt4 book ai didi

python - 如何从 HDFStore 中的框架中选择列

转载 作者:行者123 更新时间:2023-12-01 05:40:49 25 4
gpt4 key购买 nike

我在具有多索引的 HDFStore 中将frame_table 称为“数据”。在 DataFrame 中,它可能看起来像这样

                      var1   var2  var3  var4  var5  var6
x_coor y_coor date
928 310 2006257 133 14987 7045 18 240 171
2006273 136 0 7327 30 253 161
2006289 125 0 -239 83 217 168
2006305 95 14604 6786 13 215 57
2006321 84 0 4548 13 133 88

但现在我想在右侧添加一列,其中包含范围(从 1 开始)。我的计划:1. 使用范围创建新节点2. 将两个节点连接成新节点

我所做的,首先创建一个新节点(存储为 DataFrame),然后在重置列时连接

store['rindex'] = pd.DataFrame(pd.Series(xrange(1,
len(store.root.all_data.table)+1)))
store['rall']=pd.concat([store['all_data'].reset_index(),
store['rindex'].reset_index()],ignore_index=True,axis=1)

但现在这两个索引都是我的数据的一部分(在第 0、1、2、10 列中):

 0   1     2     3    5    6    7  8   9  10 11
928 310 2006257 133 14987 7045 18 240 171 0 1
928 310 2006273 136 0 7327 30 253 161 1 2
928 310 2006289 125 0 -239 83 217 168 2 3
928 310 2006305 95 14604 6786 13 215 57 3 4
928 310 2006321 84 0 4548 13 133 88 4 5

<class 'pandas.core.frame.DataFrame'>
Int64Index: 203 entries, 0 to 202
Data columns (total 11 columns):
0 203 non-null values
1 203 non-null values
2 203 non-null values
3 203 non-null values
4 203 non-null values
5 203 non-null values
6 203 non-null values
7 203 non-null values
8 203 non-null values
9 203 non-null values
10 203 non-null values
dtypes: int32(7), int64(4)

我使用 this 尝试了以下操作但这会导致空虚:

>>> store['selection'] = store.select('all_data', [pd.Term('index', '>', '0')])
>>> store['selection'].reindex(columns = ['3','4','5','6','7','8','10'])
<class 'pandas.core.frame.DataFrame'>
Int64Index: 203 entries, 0 to 202
Data columns (total 7 columns):
3 0 non-null values
4 0 non-null values
5 0 non-null values
6 0 non-null values
7 0 non-null values
8 0 non-null values
10 0 non-null values
dtypes: float64(7)

那么如何在不清空值的情况下选择这些列呢?

最佳答案

你的原始框架

In [19]: df2
Out[19]:
var1 var2 var3 var4 var5 var6
x_cor y_cor date
928 310 2006257 133 14987 7045 18 240 171
2006273 136 0 7327 30 253 161
2006289 125 0 -239 83 217 168
2006305 95 14604 6786 13 215 57
2006321 84 0 4548 13 133 88

reset_index和set_index可反转为原始帧

In [20]: df2.reset_index()
Out[20]:
x_cor y_cor date var1 var2 var3 var4 var5 var6
0 928 310 2006257 133 14987 7045 18 240 171
1 928 310 2006273 136 0 7327 30 253 161
2 928 310 2006289 125 0 -239 83 217 168
3 928 310 2006305 95 14604 6786 13 215 57
4 928 310 2006321 84 0 4548 13 133 88

In [21]: df2.reset_index().set_index(['x_cor','y_cor','date'])
Out[21]:
var1 var2 var3 var4 var5 var6
x_cor y_cor date
928 310 2006257 133 14987 7045 18 240 171
2006273 136 0 7327 30 253 161
2006289 125 0 -239 83 217 168
2006305 95 14604 6786 13 215 57
2006321 84 0 4548 13 133 88

对列进行编号

In [23]: df2['range'] = range(len(df2))

In [24]: df2
Out[24]:
var1 var2 var3 var4 var5 var6 range
x_cor y_cor date
928 310 2006257 133 14987 7045 18 240 171 0
2006273 136 0 7327 30 253 161 1
2006289 125 0 -239 83 217 168 2
2006305 95 14604 6786 13 215 57 3
2006321 84 0 4548 13 133 88 4

您需要使用索引集存储多索引框架(否则它只是一个常规的索引框架)。

您的重新索引步骤不会执行任何操作,因为您是按字符串而不是数字重新索引(例如“1”、“2”与 1,2 不同)

您的数据真的很大吗?为什么你不只是从商店读取框架,修改内存中,然后将其写回(到原始位置或新位置)。

您正在讨论的策略本质上创建了一个索引列存储,只会使得如果您有大量数据,请感知。

关于python - 如何从 HDFStore 中的框架中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611929/

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