强制numpy中的NAs使用非数字字符(将csv读取到数据帧时)

2024-09-26 22:51:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些记录,其中字段(称为INDATUMAUTDATUMA)应该包含20010101和20141231之间的数字(原因很明显)。为了允许丢失值,但保留精确到最近的日期,我将它们存储为浮动(第64页). 我希望这会迫使偶尔出现格式错误的字段(想想2oo41oo9)变成NA,但是却破坏了pandas0.18.0或iopro1.7.2中的导入。你知道吗

有没有一个没有文件的选项可以使用什么?不然呢?你知道吗

熊猫尝试的关键是

import numpy as np
import pandas as pd
treatments = pd.read_table(filename,usecols=[0,3,4,6], engine='c', dtype={'LopNr':np.uint32,'INDATUMA':np.float64,'UTDATUMA':np.float64,'DIAGNOS':object})

用erorValueError: invalid literal for float(): 2003o730。你知道吗

为了以防万一,我在IOPro中尝试了以下方法:

import iopro
adapter = iopro.text_adapter(filename, parser='csv',delimiter='\t',output='dataframe',infer_types=False)
adapter.set_field_types({0: 'u4',3:'f8', 4:'f8',6:'object'})
all_treatments.append(adapter[[0,3,4,6]][:])

但这也与iopro.lib.errors.DataTypeError: Could not convert token "2003o730" at record 1 field 3 to float64.Reason: unknown有关

数据文件以

LopNr   SJUKHUS MVO INDATUMA    UTDATUMA    HDIA    DIAGNOS OP  PVARD   EKOD1   EKOD2   EKOD3   EKOD4   EKOD5   ICD
1562    21001   046 20030707    20030711    I489A   I489A I509      2                       10
1562    21001   046 2003o730    20030801    I501    I501 I489A  DG001   2                       10

Tags: importadapterobjectasnpfilenamepdfloat64
1条回答
网友
1楼 · 发布于 2024-09-26 22:51:09

可以在^{}中使用参数converters

def converter(num):
    try:
        return np.float(num)
    except:
        return np.nan

#define each column
converters={'INDATUMA': converter, 'UTDATUMA': converter}

df = pd.read_table(filename, converters=converters)
print df
   LopNr  SJUKHUS  MVO  INDATUMA  UTDATUMA   HDIA DIAGNOS     OP  PVARD  \
0   1562    21001   46  20030707  20030711  I489A   I489A   I509      2   
1   1562    21001   46       NaN  20030801   I501    I501  I489A  DG001   

   EKOD1  EKOD2  EKOD3  EKOD4  EKOD5  ICD  
0     10    NaN    NaN    NaN    NaN  NaN  
1      2     10    NaN    NaN    NaN  NaN  

或使用^{}的参数errors='coerce'进行后处理:

df['INDATUMA'] = pd.to_numeric(df['INDATUMA'], errors='coerce')
0    20030707
1         NaN
Name: INDATUMA, dtype: float64

相关问题 更多 >

    热门问题