2012-05-14 12 views
26

私はちょうどパンダを使い始めていて、私はread_csv()メソッドを使ってcsvファイルを読み込んでいます。私が抱えている困難は、電話番号を文字列にするのではなく、パンダが電話番号を大きな数字に変換するのを防ぐことです。私は数字だけを残したコンバータを定義しましたが、それでも数字に変換されました。電話番号に 'z'を追加するように私のコンバータを変更したとき、彼らは文字列にとどまった。フィールドの値を変更せずに文字列を保持する方法はありますか?パンダのcsvリーダーでのデータタイプの指定

+2

あなたのコードを教えてください –

+3

@ガードナー:あなたは答えを受け入れると考えましたか? –

答えて

13

パンダがCSVファイルの数値/ブール値を変換しようとすることは避けられないようです。 IOパーサーのためのパンダのソースコード、特に関数_convert_to_ndarrays、および_convert_typesを見てください。あなたが明示的に各列のデータ型を指定するには、DTYPE引数を使用することができますパンダの0.11.0ので

df.phone = df.phone.astype(str) 
+1

ありがとう@lbolla、これは私のバグ修正の1つに役立ちました。ここでは、別の列が文字列だったためにfloat値が文字列として読み込まれ、後で集計関数で問題が発生しました。私はdf ['col'] = df ['col']を実行しなければならなかった。astype(float64) –

28

あなたはいつもあなたがファイルを読んだ後 をしたいタイプを割り当てることができます https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

これは 'pandas.read_fwf()'のような他の入力関数では利用できないことに注意してください。 – ReneSac

+2

I 'dtype'のサポートは既に' pandas.read_fwf'に追加されています:) – zero323

+0

この方法は、大容量のデータセットではcsvと特定の列だけを読む方法がありません。 –

関連する問題