Как заставить панд перестать пропускать первый пустой столбец в файле TSV? - PullRequest
1 голос
/ 16 апреля 2019

При импорте файла данных с разделителями табуляции (TSV) с использованием pandas.read_csv() я возвращаю фрейм данных с правильными именами столбцов (и, следовательно, с правильным количеством столбцов), но, похоже, он сдвинул данные из каждого столбца слева на 1. Это также приводит к тому, что последний, самый правый столбец будет иметь все значения NaN.

Я подозреваю, что это потому, что первый столбец полностью пуст в файле TSV (я считаю, что создатель файла использовал None в качестве значений для этого столбца в python, а затем создал файл с df.to_csv()). Как мне импортировать данные таким образом, чтобы мой фрейм данных заканчивался тем, что первый столбец был полностью NaN, что я и хочу, когда в столбце есть пустые значения?

Мой вариант использования для этого включает много этих файлов TSV, некоторые из которых будут иметь пустые столбцы charge_code, но некоторые, в которых этот столбец будет содержать значимые данные. Поэтому мне нужно динамическое решение, которое может проверить пустую природу столбца, а затем автоматически установить для него значение NaN.

Образец файла данных:

    6   MISOPROSTOL, ORAL, 200 MCG  kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard
    13  DIALYSIS/STRESS VITAMIN SUPL ORAL 100 CAPSULES  kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard
    30  PRENATAL VITAMINS 30-DAY SUPPLY kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard
    50  COMP CONT LENS EVAL kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard

Код, который я пытаюсь использовать для импорта:

pd.read_csv('problem_lines.tsv', delimiter = r'\t',
            header = None,
            names = ['charge_code', 'price', 'description', 'hospital_id',
                    'filename', 'charge_type'], 
            index_col = False)

И вывод кода:

charge_code price   description hospital_id filename    charge_type
0   6.0 MISOPROSTOL, ORAL, 200 MCG  kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard    NaN
1   13.0    DIALYSIS/STRESS VITAMIN SUPL ORAL 100 CAPSULES  kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard    NaN
2   30.0    PRENATAL VITAMINS 30-DAY SUPPLY kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard    NaN
3   50.0    COMP CONT LENS EVAL kaiser-foundation-southern-region   106191300_CDM_2018.xlsx standard    NaN

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Если вы хотите, чтобы столбец charge_code был равен NaN, установите его после прочтения следующим образом:

import numpy as np

df = pd.read_csv('problem_lines.tsv', delimiter = r'\t',
        header = None,
        names = ['price', 'description', 'hospital_id',
                'filename', 'charge_type'], 
        index_col = False)

df['charge_code'] = np.nan
0 голосов
/ 17 апреля 2019

Как ни странно, я думаю, что я понял это.Я изменил необработанную строку для разделителя на обычную строку, и теперь, по какой-то причине, это работает.Должен признаться, я немного обеспокоен тем, что не до конца понимаю , почему это работает, поэтому, если у вас есть какие-либо предложения, я бы с удовольствием их услышал!

Новый действующий код:

pd.read_csv('problem_lines.tsv', delimiter = '\t',
            header = None,
            names = ['charge_code', 'price', 'description', 'hospital_id',
                    'filename', 'charge_type'], 
            index_col = False)
...