即使使用index_col=None
或index_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 &
列也被分隔为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/