gpt4 book ai didi

python - 数据框中非数字和零值单元格的索引

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

我有一个存储 float 的数据集(比这部分大)。但是有些数据丢失了。如何找到数据丢失或具有非数值的所有索引?我在 SO 上寻找类似的问题,但主要是关于删除行,但之前可能有人问过类似的问题,但我找不到。我需要替换这些值,所以我需要识别它们。

我想获取单元格 [86,2]、[87,2]、[87,3] 的索引。我怎样才能轻松检索它们?

         0       1       2       3       4
85 1645.0 1596.0 1578.0 1567.0 1580.0
86 1554.0 1506.0 0.0 1466.0 1469.0
87 1588.0 1510.0 'ff' 0 1489.0

如果有人需要重新创建示例,我会包含 JSON:

{"0":{"85":1645.0,"86":1554.0,"87":1588.0},"1":{"85":1596.0,"86":1506.0,"87":1510.0},"2":{"85":1578.0,"86":0.0,"87":'ff'},"3":{"85":1567.0,"86":1466.0,"87":0},"4":{"85":1580.0,"86":1469.0,"87":1489.0}}

最佳答案

您可以使用 pd.to_numeric使用可选参数 errors='coerce' 尽可能将数据框中的每个系列转换为数字类型,否则无法转换的值将替换为 NaN 值。然后,您可以在 d 等于 0NaN 的条件下创建掩码 m。现在使用 DataFrame.stack您可以将掩码 m 中的列堆叠到多级索引中,从而创建一个系列 s。现在,过滤值为 True 的这一系列 s。此后,您可以使用 Series.index.tolist() 获取所需的 indices

使用:

d = df.apply(lambda s: pd.to_numeric(s, errors="coerce"))
m = d.eq(0) | d.isna()
s = m.stack()
indices = s[s].index.tolist()

中间步骤:

# print(d)
0 1 2 3 4
85 1645.0 1596.0 1578.0 1567.0 1580.0
86 1554.0 1506.0 0.0 1466.0 1469.0
87 1588.0 1510.0 NaN 0.0 1489.0

# print(m)
0 1 2 3 4
85 False False False False False
86 False False True False False
87 False False True True False

# print(s)
85 0 False
1 False
2 False
3 False
4 False
86 0 False
1 False
2 True
3 False
4 False
87 0 False
1 False
2 True
3 True
4 False
dtype: bool

# print(s[s])
86 2 True
87 2 True
3 True
dtype: bool

结果:

# print(indices)

[('86', '2'), ('87', '2'), ('87', '3')]

关于python - 数据框中非数字和零值单元格的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61971436/

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