gpt4 book ai didi

python - 如何导入带有 "occasional"引号的 csv(R 和/或 Pandas)?

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:57 25 4
gpt4 key购买 nike

我今天遇到了一个新问题。我发现了一些我正在使用的数据,看起来像这样(在 csv 文件中):

Male,White,All Combined,1989,30-31,31,"59,546","18,141","328,235"
Male,White,Felony - Drug,1989,30-31,31,"3,861","1,176","328,235"
Male,White,Felony - Other,1989,30-31,31,"2,626",800,"328,235"
Male,White,Felony - Property,1989,30-31,31,"3,468","1,057","328,235"
Male,White,Felony - Violent/Sex,1989,30-31,31,"3,150",960,"328,235"
Male,White,Misdemeanor,1989,30-31,31,"46,441","14,149","328,235"
Male,White,Status,1989,30-31,31,0,0,"328,235"

很难看出问题所在,所以让我突出显示倒数第二列:

"18,141"
"1,176"
800
"1,057"
960
"14,149"
0

问题是带逗号的值被导出为字符串,而没有逗号的值被导出为数字。明确地说,数据应该解释为:

18141
1176
800
1057
960
14149
0

也就是说,它应该都被解释为数值。

但是,这让我觉得一些“标准”应用程序正在像这样导出数据。目前,假设它是 Excel。

是否有任何有效的方法可以尝试在同一列中导入具有这种不同 数据类型的平面文件? R(read_csv 来自 readr 库)和 Python 的 Pandas(read_csv)都使用它们的标准标志,通过执行以下操作来解释此数据:

  • 假定它们全部应该是数字(无论所有“单元格”中是否存在引号)。
  • 因此,假设逗号必须是使用逗号作为小数位的欧洲风格(而不是美国句号)。
  • 因此,两个包都按如下方式解释该列:

    18.141
    1.176
    800
    1.057
    960
    14.149
    0

在某种程度上,令人印象深刻的是 R(read_csv 来自 readr 库)和 Pandas(read_csv)都可以处理这种不协调和让猜测几乎正确。

但是,是否有我可以设置的标志或可以处理此类事情的软件包?例如,一个标志说“删除引用的逗号,对于我们的美国小数点,它们肯定不是欧洲的。

如果没有,是否有足够的必要通过 fork 他们的 GitHub 存储库来为此做出贡献?

最佳答案

pandas.read_csv 具有 thousands=',' 参数,您可以将其设置为逗号,以便 pandas 将您的列读取为

0    18141
1 1176
2 800
3 1057
4 960
5 14149
6 0

还有一个 converters 参数,它采用列字典和应用于每个列的相应函数。您可以使用它进行更复杂的预处理,像这样(做同样的事情):

pd.read_csv('data.csv', converters={'column_name': lambda x: int(x.replace(',',''))})

关于python - 如何导入带有 "occasional"引号的 csv(R 和/或 Pandas)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637685/

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