Как предотвратить выбор первой строки в качестве столбца индекса - PullRequest
1 голос
/ 16 октября 2019

Я столкнулся с проблемой чтения моих данных, первый столбец назначен индексным, хотя я использую index_col=None или index_col=None. Аналогичная проблема, опубликованная как pandas read_csv index_col = Ни один не работает с разделителями в конце каждой строки

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, как он есть, и столбец контрольного индекса существует или нет?

thx

1 Ответ

1 голос
/ 16 октября 2019

Просто удалите delim_whitespace=True, потому что в вашем решении вместо разделителя пробелов используется tab s, но здесь работает только параметр 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...