我试图找出如何迭代这个pandas DataFrame中的每个值,看看它的绝对值是否高于某个定义的阈值ex:.01> abs(value)。
APP ENABLED DEVICES APPLE/MACINTOSH CN APPLECARE BARGAIN BOOKS
0 0.017685 0.000123 0.009362 0.039916
1 0.014884 0.009920 0.004747 -0.000653
2 -0.044820 -0.054319 0.001925 -0.179533
3 -0.014449 0.193068 -0.006028 -0.026057
4 0.047403 -0.046199 -0.047391 0.060473
我需要最终输出看起来像这样
[{APP ENABLED DEVICES:0.017685,BARGAIN BOOKS:0.039916},
{APP ENABLED DEVICES:0.014884},
...]
所以它看起来像一个字典列表,每行作为一个单独的小节。只有键值高于定义阈值的键值对才应包含在列表中。这是可能的吗?如果有的话,有人可以告诉我如何做到这一点? 对不起,python对我来说还是比较新的...... 谢谢
P.S这只是数据集的一小部分。完整数据框中的总列数要大得多,因此明确命名单个列是行不通的。
答案 0 :(得分:2)
你可能不想迭代,因为pandas为你提供了更有效的方法来做大多数事情。第一步是获取高于阈值的所有行。你可以这样做:
df = df[df["APPLE/MACINTOSH"] > 0.01]
然后您需要使用to_dict
将其转换为字典答案 1 :(得分:1)
以下示例将为您提供所需的输出,并显示您可以执行的操作数据帧的一些操作,而不会遍历每个项目。
import pandas as pd
pdf = pd.DataFrame.from_dict({'APP': [0.013, 0.42, -0.23, 0.06],
'BOOKS': [-1.3, 0.04, 0.54, 0.01],
'CN': [0.012, -0.03, 0.003, 0.5]})
abs_pdf = pdf.abs()
value = 0.01
sel = abs_pdf[abs_pdf > value]
results = list()
by_col = sel.T
for col in by_col:
results.append(by_col[col].dropna().to_dict())
print(results)
这将产生:
[{'APP': 0.012999999999999999, 'BOOKS': 1.3, 'CN': 0.012},
{'APP': 0.41999999999999998,
'BOOKS': 0.040000000000000001,
'CN': 0.029999999999999999},
{'APP': 0.23000000000000001, 'BOOKS': 0.54000000000000004},
{'APP': 0.059999999999999998, 'CN': 0.5}]
如果您想要不同的输出,您应该能够更改代码。