如何防止选择第一行作为索引列

时间:2019-10-16 06:20:21

标签: python pandas

即使我使用index_col=Noneindex_col=None,在读取数据时也会遇到问题,第一列被分配为索引列。发布为pandas read_csv index_col=None not working with delimiters at the end of each line

的类似问题
raw_data = {'patient': ['spried & roy']*5,
            'obs': [1, 2, 3, 1, 2],
            'treatment': [0, 1, 0, 1, 0],
            'score': ['strong', 'weak', 'normal', 'weak', 'strong'],

            }
df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score'])

   patient  obs  treatment   score
0  spried & roy    1          0  strong
1  spried & roy    2          1    weak
2  spried & roy    3          0  normal
3  spried & roy    1          1    weak
4  spried & roy    2          0  strong

使用制表符分隔格式将df写入csv

df.to_csv('xgboost.txt', sep='\t', index=False)

重新读回

read_df=pd.read_table(r'xgboost.txt', header=0,index_col=None, skiprows=0, skipfooter=0, sep="\t",delim_whitespace=True) 

read_df

         patient  obs  treatment   score
spried &     roy    1          0  strong
       &     roy    2          1    weak
       &     roy    3          0  normal
       &     roy    1          1    weak
       &     roy    2          0  strong

我们可以看到patient列分为spried &,而royspried &成为索引列,即使我显式编写了index_col=None

如何正确获取patient列,而控件索引列不存在?

thx

1 个答案:

答案 0 :(得分:1)

只需删除delim_whitespace=True,因为它在解决方案中使用了空格分隔符而不是tab,但是这里仅使用文件名的sep='\t'参数:

df.to_csv('xgboost.txt', sep='\t', index=False)
read_df=pd.read_table(r'xgboost.txt', sep="\t") 
print (read_df)
        patient  obs  treatment   score
0  spried & roy    1          0  strong
1  spried & roy    2          1    weak
2  spried & roy    3          0  normal
3  spried & roy    1          1    weak
4  spried & roy    2          0  strong

另一个想法是写入文件空格分隔符,因此delim_whitespace=True可以很好地工作:

df.to_csv('xgboost.txt', sep=' ', index=False)

read_df=pd.read_table(r'xgboost.txt', delim_whitespace=True)