Pandas read_table将混合类型读取字符串读为十六进制

时间:2015-11-02 01:16:59

标签: parsing pandas dataframe

我有这段代码:

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_codeage_coderace_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个条目。如果列条目是1XXXNRXX中的任何一个,则该条目将变为NaN

由于int条目,pandas正在将列读作0000,但在阅读X条目后会感到困惑(可能会将其混淆为十六进制)

如何强制pandas以字符串形式读取这些条目。

此外我也收到错误:

  

DtypeWarning:列(1,4,5,6,7,8,9)具有混合类型。在导入时指定dtype选项或设置low_memory = False。     interactivetivity = interactivity,compiler = compiler,result = result)

1 个答案:

答案 0 :(得分: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,Min = 0,Max = 0,Sum = 0,Count = 410.有410个读数,并且都是零。我选择了感兴趣的三列中的所有行。您正在阅读的表格中缺少数据。

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

Excel screen snip

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