gpt4 book ai didi

csv - 如何在不知道 NA 值模式的情况下快速将列转换为数字

转载 作者:行者123 更新时间:2023-12-03 17:43:10 25 4
gpt4 key购买 nike

我有许多具有相同列标题的 CSV 文件要解析。在这些文件中,可能有几种模式来表示 NA,例如:“-”、“--”、“/”、...

我不知道所有的模式,所以我无法设置 na_values read_csv() 的论据正确。

有什么快速的方法可以在这些文件中找到所有 NA 模式,或者在不知道所有模式的情况下,我仍然可以将所有列转换为数字?这是我尝试过的:

patterns = set()
for i, fn in enumerate(glob(u"data/*.csv")):
df = pd.read_csv(fn, encoding="utf-8-sig", usecols=cols, dtype=str, keep_default_na=False)
df_num = df.convert_objects(convert_numeric=True)
patterns.update( df[df_num.isnull()].stack().value_counts().index )

但是 convert_objects()是慢的。这是一些测试:
  • read_csv(dtype=str) : 大约 2.2 秒
  • read_csv()没有 dtype参数:大约 2.5 秒
  • read_csv(dtype=str) + convert_objects() : 8.4s

  • 所以, read_csv()可以比 convert_objects() 更快地将字符串转换为数字.但是如果有一个元素不能转换为数字,那么整列就会变成一个字符串列。

    有没有更快的方法可以将所有列转换为数字而不设置 na_values争论?

    最佳答案

    为什么不将 'index_col' 参数设置为 False。我相信这将导致 Pandas 从零开始按顺序编号您的列。以下是更改后您的代码的外观:

    patterns = set()
    for i, fn in enumerate(glob(u"data/*.csv")):
    df = pd.read_csv(fn, encoding="utf-8-sig", index_col=False, usecols=cols, dtype=str, keep_default_na=False)
    df_num = df.convert_objects(convert_numeric=True)
    patterns.update( df[df_num.isnull()].stack().value_counts().index )

    关于csv - 如何在不知道 NA 值模式的情况下快速将列转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31063542/

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