web-dev-qa-db-ja.com

ヘッダー行を推測するための `header = True`の古い0.17より前のpandas.read_csvの動作?

pandas read_csv()の0.17以前の古いバージョンは、ヘッダー行を推測するためにブール値_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
_

pandasはsecond row( "row 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
_

つまり、pandasは、ヘッダーがないことを明示的に書いたにもかかわらず、最初の行( "row 0")をヘッダーとして使用しました。

この動作は私には直観的ではありません。誰かが何が起こっているのか説明できますか?

13
Roman

pandasどの行がヘッダー行であるかを伝えています。Falseを渡すことで、これは0に評価されます。 、Trueを渡すと1と評価されるため、2行目を読み取ります。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 が発生します。

14
EdChum