gpt4 book ai didi

python - 替换 Pandas 数据框中很少出现的值

转载 作者:太空狗 更新时间:2023-10-29 22:26:28 25 4
gpt4 key购买 nike

我有一个中等大小(约 60,000 行 x 15 列)的 csv 文件,我正在使用 pandas 进行处理。每行代表一个人并包含个人数据。我想匿名呈现数据。我想要这样做的一种方法是替换特定列中罕见的值。我最初尝试这样做如下:

def clean_data(entry):
if df[df.column_name == entry].index.size < 10:
return 'RARE_VALUE'
else:
return entry

df.new_column_name = df.column_name.apply(clean_data)

但是每次运行它都会卡住我的系统。不幸的是,这意味着我没有有用的调试数据。有谁知道正确的方法吗?该列同时包含字符串和空值。

最佳答案

我想你想按列名分组:

g = df.groupby('column_name')

例如,您可以使用过滤器只返回那些在 column_name 中出现超过 10 次的行:

g.filter(lambda x: len(x) >= 10)

要用“RARE_VALUE”覆盖该列,您可以使用转换(它为每个组计算结果一次,并适本地分散它):

df.loc[g[col].transform(lambda x: len(x) < 10).astype(bool), col] = 'RARE_VALUE'

正如 DSM 指出的那样,以下技巧更快:

df.loc[df[col].value_counts()[df[col]].values < 10, col] = "RARE_VALUE"

这里有一些时间信息(以显示 DSM 的解决方案是多么令人印象深刻!):

In [21]: g = pd.DataFrame(np.random.randint(1, 100, (1000, 2))).groupby(0)

In [22]: %timeit g.filter(lambda x: len(x) >= 10)
10 loops, best of 3: 67.2 ms per loop

In [23]: %timeit df.loc[g[1].transform(lambda x: len(x) < 10).values.astype(bool), 1]
10 loops, best of 3: 44.6 ms per loop

In [24]: %timeit df.loc[df[1].value_counts()[df[1]].values < 10, 1]
1000 loops, best of 3: 1.57 ms per loop

关于python - 替换 Pandas 数据框中很少出现的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208562/

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