我意识到这是一个漫长的询问,但是我已经尝试了好几天了,但都没有成功,并想知道是否有人会有想法。
考虑这样的电子表格:
apple1 grape1 apple2 grape2 apple3 grape3
1 0 4 -0.2 2 0 4
2 0 4 0 6 0 3
3 -0.1 2 0 4 0 4
4 -0.5 5 0 6 -0.2 5
5 -0.4 4 0 5 0 2
6 0 6 -0.1 5 0 3
我想在数据框中搜索值小于-0.1的任何单元格,然后将值,列标题,行号和相邻值写出。
一开始,我可能会像以下内容一样简单:
Newlist()
if df >= -0.1:
Newlist.append(cell.value)
Newlist.append(row.value)
Newlist.append(column.value)
Newlist.append(cell.value.shift(1))
我完全意识到上述说法是没有道理的,但我希望它传达了我一直在尝试做的事情的想法。
接下来,我可以将df转换为列表并从那里工作(使用ifnot> = -0.1删除对象吗?),但这似乎不够优雅,而且远非理想。但是,如果有人可以使用它,我对此持开放态度。
如果我忽略了一个非常明显的问题,那么我一定已经看过有关此问题的所有堆栈交换问题,而没有道歉。
谢谢!
答案 0 :(得分:0)
首先,要过滤数据框,您可以像这样使用boolean indexing:
df[df >= -0.1]
这样,所有不超过-0.1的数据都将显示为nan,然后可以使用Pandas.isnull()进行识别。
要获取所需数据的行和列,您可以使用df.to_numpy()将数据框转换为数组,并使用enumerate遍历行和列,以保留行/列的ID您当前正在遍历:
my_data = df[df >= -0.1].to_numpy()
for idrow, row in enumerate(my_data):
for idcol, col in enumerate(row):
if not pd.isnull(col):
print("Value :"+str(col)+" column:"+str(idcol)+" row:"+str(idrow))
这将导致如下结果:
Value :0.0 column:0 row:0
Value :4.0 column:1 row:0
Value :2.0 column:3 row:0
您可以在循环中使用此名称来获取列名:
df.columns[idcol]
一旦获得这些ID,就可以通过直接访问来获取相邻的值。
my_data[x][y]
只需记住将一个条件设置为不访问不在数组中的值!