2017-05-22 8 views
2

私は比較的大きなデータセットを扱っており、カラムを適切なdtypesに変換するのに多くの時間がかかるように感じられます。Pythonで大きなデータセットのdtypeを変換する最速の方法は?

df.iloc[:,[0,1,9]] = df.iloc[:,[0,1,9]].apply(pd.to_datetime, 
errors='coerce') 
df.iloc[:,2:8] = df.iloc[:,2:8].apply(pd.to_numeric, errors='coerce') 

は、私が列を変換することができたが、それは〜20分かかった。

はこれまでのところ、私はそうのようなto_datetimeapplyto_numericを使用しています。より速い方法が必要でしょうか?

もしそうでなければ、データ探索のためにデータセットを減らすか、より高速なコンピュータを入手するのは唯一の選択肢ですか?

編集:この問題は、主に日付と時刻の書式を設定せずにto_datetimeを使用していることが原因でした。 ilocを削除して適用するとパフォーマンスが向上しましたが、日付と時刻を書式設定するほど重要ではありません。

ここで各シナリオがかかっていない時間です:

  • ませ書式設定をILOCを使用してはILOCを使用せずに
  • ない書式設定を実行するために1027.11秒かかりましたが、フォーマットで
  • 日時を実行するために789.15秒を要した実行するために19.47秒を要しました

巨大な改善。これは2,049,280行のデータセット上にありました。ありがとう@ScottBostonと@DiegoAgher!

+0

このデータセットは最初にどのように作成されましたか?ファイルから読み込んだ場合は、dtypeのヒントを渡す方がよいでしょう。 – EdChum

+0

私はpd.read_csv( 'dataset.txt'、sep = ';'、low_memory = False)を使用しました。私はdtypesを使ってみましたが、列を浮動小数点に変換できないというエラーが表示され続けました。 –

+0

これを参照してください:https://stackoverflow.com/questions/32034689/why-is-pandas-to-datetime-slow-for-non-standard-time-format-such-as-2014-12-31 –

答えて

0

applyの機能には通常かなりの時間がかかります。

df['column0'] = pd.to_datetime(df['column0'], errors='coerce') 

をというように残りの列のために: 列ベースの操作は、あなたが行うことができ、より高速です。

また、特定の形式の列がある場合は、それを指定して高速化することもできます。

df['column0'] = pd.to_datetime(df['column0'], format=format, errors='coerce') 
+0

OPは興味のある列を反復しているので、彼らはすでにこれを考慮に入れています – EdChum

+0

私は時間の書式を追加することは速度に役立つと言いました。明示的に時刻書式文字列をto_datetimeに追加します。 –

+0

@EdChum実行時間を足していると思ったので、 '.iloc [:, ...]'操作を取り除きたいだけでした。 –

関連する問題