2016-04-23 4 views
0

次のことを実行するために、より説得力/効率的な方法があります。 pd.read関数を使用する私は多くのファイルをインポートしています。これらのほとんどの場合、データフレーム内のすべてのデータ型は1つの型、つまりオブジェクトになりたいですが、限られた数は異なる型、つまりfloat64またはdatetimeになります。指定されたもの以外のすべてをオブジェクトとしてインポートする方法はありますか?現在私は次のように近づいています。列のデータ型の例外

df = pd.read_csv('filepath', dtype=object) 

次に、

df['column_with_easting&northing'] = pd.to_numeric(df['column_with_easting&northing']) 
df['column_with_dd-mm-yyyy] = pd.to_datetime(df['column_with_column_with_dd-mm-yyyy']) 

私はすべての列が日付と数値以外のオブジェクトであるかのように何かできるかどうかを知りたいと思います。私は

df = df = pd.read_csv(StringIO(data), dtype={'column_with_dd-mm-yyyy': object, 'column_with_easting&northing': np.float64}) 

を使用する場合は、パンダは、私は、データがオブジェクトである知っているとき私に対象とフロートのミックスを与え、残りの列の型を推測しようとします。

+1

あなただけのデフォルトのDTYPEとしてオブジェクトを指定したほうが良いと、それはあまり複雑にするために後処理ステップとして、数値や日時に他の列を変換したいです私が行ってきたが、そこに60列をしていて、10を変更する必要がある場合、それはフロートである列の日付である列のリストと別のものを作る非常にlengthlyコード – EdChum

+0

@EdChum。リストをループして、適切な変換を実行します。それは少しコードをクリーンアップします。 –

+0

のために作るものだ – piRSquared

答えて

0

date_parserconvertersの組み合わせ(パラメータはread_csv)を列の範囲で使用することを検討してください。例えば、以下の最初の4つの列がDD-MMM-YYYY形式で日付があり、最後の3列は文字列であるCSVを使用しています。ノートの範囲は、他のすべての列のステッピングができます:range(0,4,2)

dateparse = lambda x: pd.datetime.strptime(x, '%d-%b-%Y') 

df = pd.read_csv('data.csv',     
       parse_dates=list(range(4)), date_parser=dateparse, 
       converters={i:str for i in range(4,7)}) 
関連する問題