Pandas read_table () - Как работать с несколькими пользовательскими форматами NA? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть данные в виде:

000000008,2, 1,000000009,H,9740,000000008
000000009,1, 1,000000009,G,8790,000000008
000000010,1, 1,000000009,A,4081,000000008
000000011,2, 1,        ., ,   .,000000011
000000012,3, 1,        ., ,   .,        .
000000013,2, 1,        ., ,   .,000000013

Вы видите, что некоторые значения отсутствуют в последних 3 строках, и вот в чем проблема: как преобразовать в правильный тип данных и обработать эти случаи для большого набора данных?

Для некоторых столбцов, если значение отсутствует, я хочу исключить эти строки, для других я бы хотел установить его на какое-то значение.

Вот мой код:

inputDBFilename = inputDir + 'testData.txt'

df = pd.read_table(inputDBFilename, delimiter=',',
                   names=('A', 'B', 'C', 'D', 'E', 'F', 'G'),
                   na_values=['        .'],
                   dtype={'A': np.uint64, 'B': np.uint8, 'C': np.uint8, 'D': np.uint64,
                          'E': np.str, 'F': np.uint16, 'G': np.uint64})

Я получаю ошибку:

ValueError: Integer column has NA values in column 3

Но почему это ошибка - следует ожидать этих значений NA !!

1 Ответ

0 голосов
/ 06 сентября 2018

При чтении CSV вы можете напрямую указать формат значения вашего потребительского NA. Если имеется более одного типа строки значения NA, укажите список для аргумента na_values

In [62]:
T = '''000000008,2, 1,000000009,H,9740,000000008
000000009,1, 1,000000009,G,8790,000000008
000000010,1, 1,000000009,A,4081,000000008
000000011,2, 1,        ., ,   .,000000011
000000012,3, 1,        ., ,   .,        .
000000013,2, 1,        ., ,   .,000000013'''

from io import StringIO
df = pd.read_csv(StringIO(T), na_values=['        .', '   .'], header=None)
df

Out[62]:
    0  1  2    3  4       5     6
0   8  2  1  9.0  H  9740.0   8.0
1   9  1  1  9.0  G  8790.0   8.0
2  10  1  1  9.0  A  4081.0   8.0
3  11  2  1  NaN        NaN  11.0
4  12  3  1  NaN        NaN   NaN
5  13  2  1  NaN        NaN  13.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...