如何使熊猫停止跳过TSV文件中的第一空白列?

时间:2019-04-16 17:45:45

标签: python pandas dataframe tab-delimited

当使用pandas.read_csv()导入制表符分隔的数据文件(TSV)时,我获得了一个具有正确列名(因此列数也正确)的数据框,但它似乎已将数据从每列的左边加1。这还会导致最后的最右边的列是所有NaN值。

我怀疑这是因为TSV文件中的第一列完全空白(我相信文件的创建者使用None作为python中此列的值,然后使用{{1}制作了文件}。如何导入数据,以使数据框以第一列全为df.to_csv()结尾,每当列中包含空白值时,这就是我想要的?

我的用例涉及这些TSV文件中的很多,其中一些将具有空白的NaN列,但其中一些将具有有意义的数据。因此,我需要一个动态的解决方案,该解决方案可以检查列的空白性质,然后将其全部自动设置为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)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

奇怪的是,我想我已经解决了。我将分隔符的原始字符串更改为常规字符串,现在由于某种原因,它可以工作。我必须承认,我有点不明白为什么为什么有效,所以,如果您有任何建议,我很想听听他们的建议!

新功能代码:

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