如何让pandas停止跳过TSV文件中的第一个空白列?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让pandas停止跳过TSV文件中的第一个空白列?相关的知识,希望对你有一定的参考价值。
使用pandas.read_csv()
导入制表符分隔的数据文件(TSV)时,我会返回一个具有正确列名称的数据帧(因此列出正确的数量),但它似乎已将数据从每列向左移动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
答案
如果你想让charge_code
列为NaNs,那么在你读完之后设置它:
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
另一答案
奇怪的是,我想我已经弄明白了。我将分隔符的原始字符串更改为常规字符串,现在,由于某种原因,它可以正常工作。我必须承认,我有点困扰,我不完全理解它为什么会起作用,所以如果你有任何建议,我很乐意听到它们!
新功能代码:
pd.read_csv('problem_lines.tsv', delimiter = '\t',
header = None,
names = ['charge_code', 'price', 'description', 'hospital_id',
'filename', 'charge_type'],
index_col = False)
以上是关于如何让pandas停止跳过TSV文件中的第一个空白列?的主要内容,如果未能解决你的问题,请参考以下文章