2017-08-23 2 views
3

ソフトウェアからエクスポートされた.csvファイルがあります。この.csvファイルには多くのNaNが含まれています。私はデータフレームに読み込んでデータを分析し、dataframe.fillna(0)を使ってすべてのNaNを0に置き換える必要があります。しかし、pandas.read_csv()を使用してこの.csvファイルをインポートすると、データフレームの要素のタイプは 'str' dataframe.fillna(0)は使用できません。だから私の質問は:.csvファイルを読みながらnp.floatとして要素を変換する方法ですか?pandas.dataframeの要素をnp.floatに変換するにはどうすればいいですか?pandas.read_csvを使ってcsvファイルを読み込みますか?

pandas.read_csvの引数dtypeがあり、ここでexplantionは次のとおりです。

dtype : Type name or dict of column -> type, default None 
Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} Use str 
or object to preserve and not interpret dtype. If converters are specified, 
they will be applied INSTEAD of dtype conversion. 

それを使用する方法のいずれの例は?

ありがとうございました!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

UPDATE:回答によって提案された

ここあるいくつかのソリューション:

(1)from @Jakub。 na_values=NaNpandas.read_csv()に設定すると、.csvファイル内のすべての要素がdataframeに読み込まれるとnp.floatに変換されます。 @AndréChristoffer Andersenからの

(2)データフレームとして.csvファイルを読んだ後。 pandas.to_numericを使用して、データフレームの列をnp.floatに変換します。すべての列を数値に変換するには、forループを使用します。

(3)from @ThisGuyCantEven。 .csvファイルをnumpy.ndarrayに読み込むには、numpy.loadtxtを使用します。 skiprows引数を使用して、不等要素の行をスキップします。次にnumpy.nan_to_num()を使用してnanを0に変換します。

うまくいけば、それは読者に続く助けになるでしょう!あなたは新しい十分なパンダのバージョンをお持ちの場合は

+3

「na_values」パラメータを使用して、NaN値が何であるかをread_csvに伝えることができます。これらの値をnp.nanに変換する必要があります。これを通常どおりに置き換えることができます。 – Jakub

+0

ありがとう、@ジャカブ!それは魅力のように機能します! – Jundong

答えて

2

あなたもこのためpd.to_numeric(...)を使用することができます。

df['mycol'] = pd.to_numeric(df['mycol'], errors='coerce') 

そして、ここでは、全体のデータフレームに変換するためのトリックです:

for col in df.columns: 
    df[col] = pd.to_numeric(df[col], errors='coerce') 
+0

ありがとうございました!これは、一連のオブジェクトまたは単一のデータフレームの列でうまく機能します。データフレーム全体を変換する関数はありますか? – Jundong

+1

@ジュンドン確かに。私の編集を参照してください。ちょうど列の上にループします。 –

1

理由だけではなく、使用しないでnumpy.loadtxt?たとえば、データを混在させて数値列を数値配列にしたいので、いつでもdf['column'].as_matrix()を使用することができます。また、必要に応じてデータフレーム全体を変換することもできます。

+0

ありがとうございました!私は 'numpy.loadtxt'を忘れてしまった。私はちょうどそれを試み、 'numpy.loadtxt'は各行が同じ量の要素を持たなければならないことを要求しました。私のために。csvファイルには、スキップする必要がある最初の行がいくつかあります。これは、引数 'skiprows 'でも行えます。 'nan'は' numpy.nan_to_num'で0に変換できます。これは別の方法かもしれません。 – Jundong

+0

'usecols'引数で列をスキップすることもできますが、配列で指定された特定の列をスキップするには、その配列を使用して、すべての列インデックスを含む別の配列の値をマスクする必要があります。 – ThisGuyCantEven

関連する問題