即使使用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


如我们所见,即使我显式编写patientspried &列也被分隔为roy,并且spried &index_col=None成为索引列。

我们如何正确地获取patient列,而控件索引列是否存在?

谢谢

最佳答案

只需删除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)

关于python - 如何防止选择第一行作为索引列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58406881/

10-08 22:31