2016-11-05 5 views
0

私はcsvファイルをPythonにインポートしています。予想どおり、すべての値を文字列としてリストを作成しますが、これを避けたいと思います。この '24'のように見えますが、実際には値がintであることをPythonが検出する方法はありますか?私たちが持っているデータの種類を検出する

ありがとうございます。

+1

あなたはどのライブラリを使用していますか?あなたのデータはどのように見えますか? –

+0

の詳細情報が必要になる場合があります。列には文字列が含まれていることがあります。より具体的にする必要があります:コードを見せてください。 –

+0

[this](http://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval)の回答を参照してください。 – Rockybilly

答えて

1

ジョブを実行するために、このような関数を記述することができます。 他のデータ型をカバーするように展開できます。

def return_str_type(str): 
    possible_type = [int, float] 
    for dtype in possible_type: 
     try: 
      str = dtype(str) 
      break 
     except: 
      pass 
    return type(str).__name__ 

print(return_str_type('4')) 
print(return_str_type('4.3')) 
print(return_str_type('s4')) 

あなたは順序に注意する必要がありますが、これはOPに

int 
float 
str 

を与えるだろう。例えばintチェックは常にfloatより前にする必要があります。

+0

あなたはこれについてevalを必要とせず、クラスを使ってリストを作成し、 'str = dtype(str)'を実行してください。 – Copperfield

+0

あなたの提案に従って更新@Copperfield –

+0

あなたは私にそれを打つことができます。私は、完全な行を除いて、変換されたアイテムのリストを返すという点を除いて、同じことをしました。 '' 'data = map(f、csv.reader)と一緒に使う' '' – wwii

-1

複数のモジュールがサポートしています。その中でpandasです。 read_csvはデータ型を推論できます。

0

ast.literal_evalです。

print ast.literal_eval('[1, 2, 3]') == [1, 2, 3] 
print ast.literal_eval('23') == 23 

Pythonはまた、非データ型のコマンドも、この機能によって有害な目的のために処理することができますので、しかし、それは安全ではありません、evalコマンドを持っています。

+0

ありがとう、私はそれを行ってきました、それは値のエラー:不正な文字列が言うが、私は試し続けます。 – plshelp

関連する問題