gpt4 book ai didi

python - 在数据框python中找到错误的数据点

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:26 24 4
gpt4 key购买 nike

我正在处理大型数据集(> 100.000,>100)。原始格式是 CSV。我使用 pandas 库将文件读取为 DataFrame

所有数据都必须是数字类型( float 的整数),但经常会出现缺失数据点或原始 CSV 文件中的错误字符串的情况。扫描整个 CSV 需要花费大量时间,但可以找到所有点。因此,我正在尝试生成一个可以用来定位错误的函数或类。并提供它们的列名和行名和/或编号,以快速追踪它们。

为了试验和构建正确的算法,我使用了一个小型虚拟数据框,其中包含一些示例错误数据点。定位点的预期结果例如是:['B', 2], ['D', 4],使用列和索引进行定位。

# Import dependency
import pandas as pd

# Create dummy DataFrame for testing
df = pd.DataFrame({'A': [1, 1, 1, 1, 1],
'B': [1, 1, '#', 1, 1], # Undesired datapoint '#' to be located
'C': [1, 1, 1, 1, 1],
'D': [1, 1, 1, 1, '0']}) # Undesired datapoint '0' to be located

`

我使用虚拟数据框创建了一个掩码数据框,其中包含原始数据框的 bool 语句。在掩码中,所有数值(intfloat)都被指定为 True,所有非数字数据都被指定为 False.

df_mask = df.applymap(lambda x: isinstance(x, (int, float)))

现在在定位非数字数据的部分我卡住了。我最好的尝试如下,但是它没有为我提供 False 点的位置。

df_cols = col for col if df_mask.loc[False].any()

获取屏蔽数据帧 (df_mask) 的 False 位置的方法是什么?

或者是否有更快的方法来跟踪 DataFrame 中的错误数据点?

最佳答案

我认为您可以先通过 unstack 创建 Series ,然后使用 apply 创建 mask,最后通过 boolean indexing 过滤.

对于索引的值是必要的添加 remove_unused_levels :

df = df.unstack()
df_mask = df.apply(lambda x: isinstance(x, (int, float)))

print (df[~df_mask])
B 2 #
D 4 0
dtype: object

print (df.index[~df_mask].remove_unused_levels().tolist())
[('B', 2), ('D', 4)]

编辑:

如果要提取非数值,则使用 to_numeric使用 errors='coerce' 将值转换为 NaN 然后检查它们:

df = pd.DataFrame({'A': [1, 1, 1, 1, 1],
'B': [1, 1, '#', 1, 1],
'C': [1, 1, 1, 1, 1],
'D': [1, 1, 1, 1, '0']}).astype(str)

print (df.applymap(type))
A B C D
0 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
1 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
2 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
3 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
4 <class 'str'> <class 'str'> <class 'str'> <class 'str'>

df = df.unstack()
df_mask = pd.to_numeric(df, errors='coerce').isnull()
print (df[df_mask])
B 2 #
dtype: object

print (df.index[df_mask].remove_unused_levels().tolist())
[('B', 2)]

关于python - 在数据框python中找到错误的数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528751/

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