我正在使用Python 3和pandas,我想在列表中创建一个列表,方法是遍历数据帧列表并拉出符合我条件的索引。我收到错误消息“列表索引必须是整数或切片,而不是str”。 我认为该功能可以正常工作,但是for循环不能正常工作。 我需要我的函数来读取数据帧中的一列,查找小于或等于0.05的值(在第5列中,标题为“ P> | z |”),并创建一个符合该条件的索引列表。 / p>
def list_of_new_variables(maker_df):
# Create a list with only significant p values
newlist = list(make_results[make_results['P>|z|']<=acceptable_p_value].index)[0:]
return newlist
newlist = []
for maker_df in make_results:
newlist.append(list_of_new_variables(maker_df))
结果应为与每个数据框的列表中的条件匹配的索引列表。
这是我的样品: data to find indexes dataframes make_results
编辑
完全错误是:
回溯(最近通话最近一次):
文件“”的第10行,在 make_variables_refined.append(list_of_new_variables(make_results))
文件“”的第3行,在 list_of_new_variables newlist = list(make_results [make_results ['P> | z |'] <= acceptable_p_value] .index)[0:]
TypeError:列表索引必须是整数或切片,而不是str
另一个编辑: 为了简化起见,尝试过该代码,并且还会收到错误“ TypeError:列表索引必须是整数或切片,而不是str”。我还尝试使用列引用而不是列名('P> | z |'),它返回了相同的错误。
make_variables_refined = []
for maker_df in make_results:
make_variables_refined.append(make_results[int(make_results['P>|z|'])<=acceptable_p_value].index[0:])
回溯(最近通话最近一次):
文件“”的第3行,在 make_variables_refined.append(make_results [int(make_results ['P> | z |'])<= acceptable_p_value] .index [0:])
TypeError:列表索引必须是整数或切片,而不是str
答案 0 :(得分:0)
索引必须是整数。将索引设置为整数:
def list_of_new_variables(maker_df):
# Create a list with only significant p values
newlist = list(make_results[make_results['P>|z|']<=acceptable_p_value].index)[0:]
return newlist
newlist = []
for maker_df in make_results:
newlist.append(list_of_new_variables(int(maker_df)))
答案 1 :(得分:0)
在列表中进行引用和索引时,索引必须为整数形式。就你而言我认为错误在于这一行:
newlist = list(make_results[make_results['P>|z|']<=acceptable_p_value].index)[0:]
方括号中的值应为整数
尝试:
newlist = list(make_results[int(make_results['P>|z|')]<=acceptable_p_value].index)[0:]
答案 2 :(得分:0)
make_results
是数据仓库的列表。在第3行中,可以通过make_results['P>|z|']
访问它。这会产生错误。
在您的情况下,目标是找到与具有P> | z |的记录关联的索引。值小于或等于0.05。因此,第10行应该是
newlist = list(make_df[make_df['P>|z|']<=acceptable_p_value].index)[:]
答案 3 :(得分:0)
最后,我使用以下命令从原始数据框中删除了变量:
for datas in make_results:
datas.drop(datas.loc[datas['P>|z|'] > .05].index, inplace=True)