根据对象的值删除数据框中行的间隔
Drop interval of rows in a dataframe based on the value of an object
我正在尝试将我的 Dataframes 中的行间隔从最大值(不包括)删除到列的其余(末尾)。这是我的 df (dflist['time']) 的列之一的示例:
0 0.000000
1 0.021528
2 0.042135
3 0.062925
4 0.083498
...
88 1.796302
89 1.816918
90 1.837118
91 1.857405
92 1.878976
Name: time, Length: 93, dtype: float64
我尝试将 .iloc 和 .drop 函数与 .index 结合使用来实现此结果,但到目前为止没有任何成功:
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['time'] = dflist['time'].iloc[0:[v_max_idx]]
我也尝试了几种变体,比如将 'v_max_idx' 转换为带有 .list 或 .int 的列表以更改 .iloc 函数内的类型,因为这似乎是问题所在:
TypeError: cannot do positional indexing on RangeIndex with these indexers [[Int64Index([15], dtype='int64')]] of type list
我不知道为什么我不能这样做,这很令人沮丧,因为它似乎是一个非常基本的操作..
因此,我们将不胜感激任何帮助!
##关于 dropna() 问题的编辑
我试过 .notna() :
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['velocity'] = dflist['velocity'].iloc[0:list(v_max_idx)[0]]
dflist['velocity'] = dflist['velocity'][dflist['velocity'].notna()]
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]]
dflist['time'] = dflist['time'][dflist['time'].notna()]
并尝试使用 dropna():
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['velocity'] = dflist['velocity'].iloc[0:list(v_max_idx)[0]].dropna()
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]].dropna()
没有错误消息,它只是什么都不做:
19 0.385243 1.272031
20 0.405416 1.329072
21 0.425477 1.352059
22 0.445642 1.349657
23 0.465755 1.378407
24 NaN NaN
25 NaN NaN
26 NaN NaN
27 NaN NaN
28 NaN NaN
29 NaN NaN
30 NaN NaN
31 NaN NaN
32 NaN NaN
33 NaN NaN
34 NaN NaN
35 NaN NaN
36 NaN NaN
Return pandas.Index()
in your example is pandas.Int64Index()
的值。
pandas.DataFrame.iloc()
允许像带有 ints 的切片对象这样的输入,例如1:7
.
在你的代码中,无论v_max_idx
是一个pandas.Index()
对象还是[pandas.Index()]
是一个列表对象都不符合iloc()
参数类型的要求。
您可以使用 list(v_max_idx)
将 pandas.Index()
对象转换为列表,然后使用 [0]
等来访问数据,例如
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]]
我正在尝试将我的 Dataframes 中的行间隔从最大值(不包括)删除到列的其余(末尾)。这是我的 df (dflist['time']) 的列之一的示例:
0 0.000000
1 0.021528
2 0.042135
3 0.062925
4 0.083498
...
88 1.796302
89 1.816918
90 1.837118
91 1.857405
92 1.878976
Name: time, Length: 93, dtype: float64
我尝试将 .iloc 和 .drop 函数与 .index 结合使用来实现此结果,但到目前为止没有任何成功:
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['time'] = dflist['time'].iloc[0:[v_max_idx]]
我也尝试了几种变体,比如将 'v_max_idx' 转换为带有 .list 或 .int 的列表以更改 .iloc 函数内的类型,因为这似乎是问题所在:
TypeError: cannot do positional indexing on RangeIndex with these indexers [[Int64Index([15], dtype='int64')]] of type list
我不知道为什么我不能这样做,这很令人沮丧,因为它似乎是一个非常基本的操作..
因此,我们将不胜感激任何帮助!
##关于 dropna() 问题的编辑
我试过 .notna() :
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['velocity'] = dflist['velocity'].iloc[0:list(v_max_idx)[0]]
dflist['velocity'] = dflist['velocity'][dflist['velocity'].notna()]
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]]
dflist['time'] = dflist['time'][dflist['time'].notna()]
并尝试使用 dropna():
for nested_dict in dict_all_raw.values():
for dflist in nested_dict.values():
v_max = dflist['velocity'].max()
v_max_idx = dflist['velocity'].index[dflist['velocity'] == v_max]
dflist['velocity'] = dflist['velocity'].iloc[0:list(v_max_idx)[0]].dropna()
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]].dropna()
没有错误消息,它只是什么都不做:
19 0.385243 1.272031
20 0.405416 1.329072
21 0.425477 1.352059
22 0.445642 1.349657
23 0.465755 1.378407
24 NaN NaN
25 NaN NaN
26 NaN NaN
27 NaN NaN
28 NaN NaN
29 NaN NaN
30 NaN NaN
31 NaN NaN
32 NaN NaN
33 NaN NaN
34 NaN NaN
35 NaN NaN
36 NaN NaN
Return pandas.Index()
in your example is pandas.Int64Index()
的值。
pandas.DataFrame.iloc()
允许像带有 ints 的切片对象这样的输入,例如1:7
.
在你的代码中,无论v_max_idx
是一个pandas.Index()
对象还是[pandas.Index()]
是一个列表对象都不符合iloc()
参数类型的要求。
您可以使用 list(v_max_idx)
将 pandas.Index()
对象转换为列表,然后使用 [0]
等来访问数据,例如
dflist['time'] = dflist['time'].iloc[0:list(v_max_idx)[0]]