【问题标题】:Pandas read_table reads mixed type reading string as hexadecimalPandas read_table 将混合类型读取字符串读取为十六进制
【发布时间】:2015-11-02 01:16:59
【问题描述】:

我有这个代码:

Link to code and data on GitHub.

col_names = {'age_code':'str', 'los_code':'str', 'race_code':'str'}
injuries = pd.read_table(some_url, dtype=col_names)

los_code、age_code 和 race_code 有另一个包含代码的表。例如race_code 是:

  race_code                          race_text
0      0000                          All races
1      1XXX                White, non-Hispanic
2      2XXX                Black, non-Hispanic
3      3XXX                           Hispanic
4      4XXX          Asian or Pacific Islander
5      5XXX  American Indian or Alaskan Native
6      NRXX                       Not reported

阅读后,所有这三个三列都有NaN条目,除非代码为0000。如果列条目是1XXX 到NRXX 中的任何一个,则条目变为NaN。

由于0000 条目,熊猫似乎将列读取为int,但在读取带有X 的条目后感到困惑(可能会混淆它的十六进制)

如何强制 pandas 将这些条目读取为字符串。

此外,我也得到了错误:

DtypeWarning:列 (1,4,5,6,7,8,9) 具有混合类型。在导入时指定 dtype 选项或设置 low_memory=False。 交互性=交互性,编译器=编译器,结果=结果)

【问题讨论】:

    标签: parsing pandas dataframe


    【解决方案1】:

    使用'object' 而不是'str'。

    col_names = {'age_code':'object', 'los_code':'object', 'race_code':'object'}
    

    考虑使用col_dtypes 之类的名称,而不是col_names 作为变量名。还可以考虑阅读Pandas docs 以找到此类问题的答案。


    附言。这是一个警告,而不是您遇到的错误。


    编辑

    好的,我查看了您的数据和代码。这是我在简陋的 MS Excel 中打开您的表格时的屏幕截图。你能告诉我 age_code、race_code 和 los_code 的值在哪里吗?因为如果列中没有数据,Pandas 会在那里插入 NaN。另请注意屏幕截图右下角由 Excel 生成的汇总统计信息。平均值 = 0,最小值 = 0,最大值 = 0,总和 = 0,计数 = 410。有 410 个读数,并且全部为零。我选择了感兴趣的三列中的所有行。您正在阅读的表格中缺少数据。

    然后,单独读取 age_code、race_code 和 los_code 表似乎没有问题。最后,从警告中获取提示,并在您的 pd.read_table() 中传递 low_memory=False,而不是 dtype=col_names。

    我认为您的问题已得到解答,因为缺失值在您的数据中。它们不是由 Pandas 引起的,也不是您的代码的结果。

    【讨论】:

    • 确实,在我问这个问题之前我已经尝试过了,但没有奏效。我已编辑问题以包含指向 GitHub 上代码的链接。
    • 有趣。因为一旦你通过dtype kwarg,Pandas 应该只使用它并以该格式对所有内容进行类型转换。让我明天进行一些测试,并相应地更新答案。
    • 查看答案中的编辑。问题在于您的数据,而不是您的代码或 Pandas。这个问题得到了回答。
    • 感谢您检查 Kartik
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 2018-02-02
    • 2013-06-04
    • 2012-09-17
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多