Метод pandas read_csv() интерпретирует "NA" как nan (а не число) вместо допустимой строки.
В простом случае ниже обратите внимание, что вывод в строке 1, столбец 2 (подсчет с нулевой отметкой) является "нан" вместо "NA".
sample.tsv (с разделителями табуляции)
ЦАП PDB SP_PRIMARY RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 1 126 1 126 1 126
5d8b O P60491 1 118 1 118 1 118
read_sample.py
import pandas as pd
df = pd.read_csv(
'sample.tsv',
sep='\t',
encoding='utf-8',
)
for df_tuples in df.itertuples(index=True):
print(df_tuples)
Выход
(0, u'5d8b ', u'N', u'P60490 ', 1, 146, 1, 146, 1, 146)
(1, u'5d8b ', nan, u'P80377', 1, 126, 1, 126, 1, 126)
(2, u'5d8b ', u'O', u'P60491 ', 1, 118, 1, 118, 1, 118)
Дополнительная информация
Повторная запись файла с кавычками для данных в столбце "CHAIN", а затем с использованием параметра quotechar quotechar='\''
имеет тот же результат. И передача словаря типов через параметр dtype dtype=dict(valid_cols)
не изменяет результат.
Старый ответ Предотвратить pandas от автоматического вывода типа в read_csv предлагает сначала использовать массив записей numpy для синтаксического анализа файла, но с учетом возможности теперь указывать column dtypes, это не обязательно.
Обратите внимание, что itertuples() используется для сохранения dtypes, как описано в документации по iterrows: "Чтобы сохранить типы dtypes во время итерации по строкам, лучше использовать itertuples(), который возвращает кортежи значений и обычно быстрее iterrows".
Пример был протестирован на Python 2 и 3 с pandas версией 0.16.2, 0.17.0 и 0.17.1.
Есть ли способ захватить допустимую строку "NA" вместо ее преобразования в nan?