パンダのread_csv low_memoryおよびdtypeオプション

ジョシュ:

電話するとき

df = pd.read_csv('somefile.csv')

私は得ます:

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/pandas/io/parsers.py:1130:DtypeWarning:列(4、5、7、16)には型が混在しています。インポート時にdtypeオプションを指定するか、low_memory = Falseを設定します。

dtypeオプションがに関連しているのはなぜですかlow_memory、なぜFalseこの問題を解決するのですか?

firelynx:

非推奨のlow_memoryオプション

このlow_memoryオプションは適切に廃止予定ではありませんが、実際には何も変更しないため、廃止する必要があります[ ソース ]

このlow_memory警告が表示されるのは、各列のdtypeを推測するのにメモリが非常に必要になるためですPandasは、各列のデータを分析して、設定するdtypeを決定しようとします。

Dtype推測(非常に悪い)

パンダは、ファイル全体が読み取られた後に列が持つべきdtypeを決定することしかできません。つまり、最後の値を読み取るときにその列のdtypeを変更しなければならないリスクがない限り、ファイル全体を読み取る前に実際に解析できるものはありません。

user_idという列がある1つのファイルの例を考えてみます。これには、user_idが常に数値である1000万行が含まれています。パンダはそれが数字だけであることを認識できないため、ファイル全体を読み取るまで、それを元の文字列として保持する可能性があります。

dtypesの指定(常に実行する必要があります)

追加

dtype={'user_id': int}

これをpd.read_csv()呼び出すと、パンダはファイルの読み取りを開始したときに、これが整数にすぎないことを認識できます。

また、ファイルの最後の行が列に"foobar"書き込まれたuser_id場合、上記のdtypeが指定されているとロードがクラッシュすることにも注意してください。

dtypeが定義されているときに壊れる壊れたデータの例

import pandas as pd
try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO


csvdata = """user_id,username
1,Alice
3,Bob
foobar,Caesar"""
sio = StringIO(csvdata)
pd.read_csv(sio, dtype={"user_id": int, "username": "string"})

ValueError: invalid literal for long() with base 10: 'foobar'

通常、dtypeは数の多いものです。詳細については、http//docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.htmlを参照してください。

どんなdtypeが存在しますか?

numpy dtypes:float、int、bool、timedelta64 [ns]、datetime64 [ns]にアクセスできます。numpyの日付/時刻のdtypeはタイムゾーンに対応しいないことに注意してください。

パンダはこのdtypeのセットを独自に拡張します。

'datetime64 [ns、]'これはタイムゾーンを認識するタイムスタンプです。

本質的に列挙型(保存する整数キーで表される文字列)である「カテゴリ」

'period []' timedeltaと混同しないでください、これらのオブジェクトは実際には特定の期間に固定されています

'Sparse'、 'Sparse [int]'、 'Sparse [float]'は、スパースデータまたは '多数の穴があるデータ'の場合NaNまたはNoneをデータフレームに保存する代わりに、オブジェクトを省略してスペースを節約します。

「間隔」はそれ自体のトピックですが、その主な用途は索引付けです。詳細はこちら

'Int8'、 'Int16'、 'Int32'、 'Int64'、 'UInt8'、 'UInt16'、 'UInt32'、 'UInt64'は、numpyバリアントとは異なり、すべてnull可能なパンダ固有の整数です。

'string'は、文字列データを操作するための特定のdtype .strであり、シリーズの属性へのアクセスを提供します

'boolean'は派手な 'bool'に似ていますが、欠落データもサポートしています。

ここで完全なリファレンスを読んでください:

Pandas dtypeリファレンス

注意点、注意事項、メモ

設定dtype=objectすると、上記の警告が表示されなくなりますが、メモリ効率は向上せず、処理効率が向上するだけです。

dtype=unicodenumpyではa unicodeはとして表されるため、設定は何もしませんobject

コンバーターの使用

@sparrow 'foobar'は、として指定された列で遭遇したときにパンダが爆発するのを避けるために、コンバーターの使用法を正しく指摘していますintコンバーターはパンダで使用するには非常に重く非効率的であり、最後の手段として使用する必要があることを付け加えておきます。これは、read_csvプロセスが単一のプロセスであるためです。

CSVファイルは行ごとに処理できるため、ファイルをセグメントに分割して複数のプロセスを実行するだけで、複数のコンバーターによって並列でより効率的に処理できます。これは、pandasがサポートしていないものです。しかし、これは別の話です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダのエラーread_csv

分類Dev

パンダread_csvパスの問題

分類Dev

列の特定のレコードのPythonパンダread_csv

分類Dev

URLからパンダread_csv

分類Dev

StringIOとパンダread_csv

分類Dev

パンダread_csvが高速化

分類Dev

パンダread_csvでParserError

分類Dev

C#パンダread_csv相当

分類Dev

パンダread_csv解析日付

分類Dev

パンダの欠落データの処理read_csv

分類Dev

複数の区切り文字のパンダread_csv()

分類Dev

パンダread_csv関数の先行ゼロの問題

分類Dev

パンダのコーデックの問題read_csv

分類Dev

Windowsでのパンダread_csvエラー

分類Dev

パンダread_csv使用時のurllib.error.URLError

分類Dev

read_csvパンダ関数の入力

分類Dev

パンダの複雑な区切り列read_csv

分類Dev

パンダread_csv関数のエラー

分類Dev

パンダread_csvを複数のDataFrameに

分類Dev

Pythonパンダ、read_csvのUnicodeデコードエラー

分類Dev

パンダのread_tableとread_csvに違いはありますか?

分類Dev

パンダの文字列の配列の引用符to_csvjupyterのread_csv

分類Dev

パンダのread_csvとusecolsを使用した列のフィルター

分類Dev

パンダのread_csvとusecolsを使用した列のフィルター

分類Dev

パンダ:read_csvは空白行の後の行を無視します

分類Dev

パンダの「read_csv」関数に空白の値を保持させる方法

分類Dev

パンダの read_csv() が関数内の変数に割り当てない

分類Dev

パンダread_csv混合タイプの列を文字列として

分類Dev

パンダでの異なるread_csv index_col = None / 0 / False

Related 関連記事

ホットタグ

アーカイブ