2017-05-07 18 views
0

私はPandasデータフレームとしてCSVファイルをインポートしました。 df.dtypesを実行すると、ほとんどの列が「オブジェクト」として取得されます。これは、Bokehをチャートとして取り込むためには役に立たないものです。CSVをインポートした後、Pandasデータフレームのデータタイプ "オブジェクト"を変更するにはどうすればよいですか?

  1. 私は文字列としてintとして列、dateとして別の列、および残りの部分を変更する必要があります。
  2. インポートしたデータは一度しか表示されません。インポート中に変更することをお勧めしますか(どのように)、またはインポート後に?

答えて

2

read_csvにdatetime need parse_datesのパラメータがあると思います。あなたがint列を持っているとint64dtypeを取得いけない場合read_csvはaoutomatically dtypesを唱えるため

は、私は、いくつかのstrings多分empty stringsがあると思います。しかしNaNfloatタイプを持っているのでfloat列を取得する -

はその後to_numericによってNaNに不正なデータを変換する必要があります。だから、いくつかのintにNaNを置き換える必要があります(例えば0)をしてからは、intにキャスト:

df['col_int'] = pd.to_numeric(df['col_int'], errors='coerce').fillna(0).astype(int) 

サンプル:

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""a;b;c;d 
A;2015-01-01;3;e 
S;2015-01-03;4;r 
D;2015-01-05;5r;t""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), sep=";", parse_dates=[1]) 
print (df) 
    a   b c d 
0 A 2015-01-01 3 e 
1 S 2015-01-03 4 r 
2 D 2015-01-05 5r t 

print (df.dtypes) 
a   object 
b datetime64[ns] 
c   object 
d   object 
dtype: object 

df['c'] = pd.to_numeric(df['c'], errors='coerce').fillna(0).astype(int) 
print (df) 
    a   b c d 
0 A 2015-01-01 3 e 
1 S 2015-01-03 4 r 
2 D 2015-01-05 0 t 

print (df.dtypes) 
a   object 
b datetime64[ns] 
c    int32 
d   object 
dtype: object 
変更の dtypes必要

dtypeパラメータ:

temp=u"""a;b;c;d 
A;10;3;e 
S;2;4;r 
D;6;1;t""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp), sep=";", dtype={'b':str, 'c':float}) 
print (df) 
    a b c d 
0 A 10 3.0 e 
1 S 2 4.0 r 
2 D 6 1.0 t 

print (df.dtypes) 
a  object 
b  object 
c float64 
d  object 
dtype: object 
0

csvファイルの読み込み中:

使用DTYPEやコンバータがパンダここ

import pandas as pd import numpy as np df = pd.read_csv('data.csv',dtypes = {'a':float64,'b':int32},headers=None)

にread_csv属性で、自動的にタイプを使用すると、指定したデータ型として読み込まれます。列の型を変更する

使用astype機能:csvファイルを読んだ後

このコードを確認してください。 は、あなたがこの方法の利点は、一度に複数の列の種類を変更する2つの列

df[['a', 'b']] = df[['a', 'b']].astype(float)

を持って考えてみましょう。

関連する問題