Старый pre-0.17 pandas.read_csv поведение header = True для вывода строки заголовка?

Как старые версии панд до 0.17 read_csv() интерпретировали передачу логических header=True/False для вывода строки заголовка?

У меня есть данные CSV с заголовком:

col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0

Если читать с header=True

то есть df = pandas.read_csv('test.csv', sep=';', header=True),

это дает следующий фрейм данных:

   1.0  10.0  100.0
0    2    20    200
1    3    30    300

Это означает, что панды использовали вторую строку ("строка 1") для имен столбцов (выведены имена "1.0", "10.0" и "100.0").

тогда как если читать с header=False

df = pandas.read_csv('test.csv', sep=';', header=False)

дает следующее:

   col1  col2  col3
0     1    10   100
1     2    20   200
2     3    30   300

Это означает, что панды использовали первую строку ("строка 0") в качестве заголовка, несмотря на тот факт, что я написал явно, что заголовок отсутствует.

Такое поведение не является интуитивным для меня. Может кто-нибудь объяснить, что происходит?

Ответ 1

Вы говорите пандам, какая строка является строкой вашего заголовка, передавая False, это оценивает 0, поэтому он читает в первой строке как заголовок, как и ожидалось, когда вы передаете True, он оценивает 1, так он читает вторую строку, если вы передали None, то думает, что строки заголовка нет, и автоматически сгенерирует порядковые значения.

In [17]:    
import io
import pandas as pd
t="""col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0"""
print('False:\n', pd.read_csv(io.StringIO(t), sep=';', header=False))
print('\nTrue:\n', pd.read_csv(io.StringIO(t), sep=';', header=True))
print('\nNone:\n', pd.read_csv(io.StringIO(t), sep=';', header=None))

False:
    col1  col2  col3
0     1    10   100
1     2    20   200
2     3    30   300

True:
    1.0  10.0  100.0
0    2    20    200
1    3    30    300

None:
       0     1      2
0  col1  col2   col3
1   1.0  10.0  100.0
2   2.0  20.0  200.0
3   3.0  30.0  300.0

UPDATE

Начиная с версии 0.17.0 теперь будет подниматься TypeError