首页 > 解决方案 > 如何让熊猫停止跳过 TSV 文件中的第一个空白列?

问题描述

使用 导入制表符分隔的数据文件 (TSV)pandas.read_csv()时,我返回一个具有正确列名(以及正确的列数)的数据框,但它似乎已将数据从每一列向左移动了 1。这也导致最后的最右边的列是所有NaN值。

我怀疑这是因为 TSV 文件中的第一列完全是空白的(我相信文件的创建者None在 python 中用作该列的值,然后用df.to_csv(). 如何导入数据,使我的数据框最终以第一列为 all 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

标签: pythonpandasdataframecsv

解决方案


如果您希望该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

推荐阅读