私はCSVからインポートされたデータを扱ってきました。 Pandasはいくつかの列を浮動小数点に変更したので、これらの列の数値は浮動小数点として表示されます。ただし、整数で表示するか、カンマなしで表示する必要があります。それらを整数に変換したり、カンマを表示しない方法はありますか?
Float出力を修正するには、これを行います。
df= pd.DataFrame(range(5), columns=['a'])
df.a = df.a.astype(float)
df
Out[33]:
a
0 0.0000000
1 1.0000000
2 2.0000000
3 3.0000000
4 4.0000000
pd.options.display.float_format = '{:,.0f}'.format
df
Out[35]:
a
0 0
1 1
2 2
3 3
4 4
.astype(<type>)
関数を使用して列のdtypeを操作します。
>>> df = pd.DataFrame(np.random.Rand(3,4), columns=list("ABCD"))
>>> df
A B C D
0 0.542447 0.949988 0.669239 0.879887
1 0.068542 0.757775 0.891903 0.384542
2 0.021274 0.587504 0.180426 0.574300
>>> df[list("ABCD")] = df[list("ABCD")].astype(int)
>>> df
A B C D
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
編集:
欠損値を処理するには
>>> df
A B C D
0 0.475103 0.355453 0.66 0.869336
1 0.260395 0.200287 NaN 0.617024
2 0.517692 0.735613 0.18 0.657106
>>> df[list("ABCD")] = df[list("ABCD")].fillna(0.0).astype(int)
>>> df
A B C D
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
>>>
列名のリストを使用して、.applymap()を使用して複数の列の型を、または.apply()を使用して単一の列の型を変更します。
df = pd.DataFrame(10*np.random.Rand(3, 4), columns=list("ABCD"))
A B C D
0 8.362940 0.354027 1.916283 6.226750
1 1.988232 9.003545 9.277504 8.522808
2 1.141432 4.935593 2.700118 7.739108
cols = ['A', 'B']
df[cols] = df[cols].applymap(np.int64)
A B C D
0 8 0 1.916283 6.226750
1 1 9 9.277504 8.522808
2 1 4 2.700118 7.739108
df['C'] = df['C'].apply(np.int64)
A B C D
0 8 0 1 6.226750
1 1 9 9 8.522808
2 1 4 2 7.739108
これは、NaN値を持つことができる場合も考慮して、Pandas DataFrame dfのより多くの列をfloatからintegerに変換する場合の迅速な解決策です。
cols = ['col_1', 'col_2', 'col_3', 'col_4']
for col in cols:
df[col] = df[col].apply(lambda x: int(x) if x == x else "")
私は試してみました:
else x)
else None)
しかし、結果はまだ浮動小数点数を持っているので、私はelse ""
を使いました
import pandas as pd;
right = pd.DataFrame({'C': [1.002, 2.003],
'D': [1.009, 4.55],
"key":['K0', 'K1']})
C D key
0 1.002 1.009 K0
1 2.003 4.550 K1
right['C'] = right.C.astype(int)
C D key
0 1 1.009 K0
1 2 4.550 K1
@Ryan Gを.astype(<type>)
関数の使用法に言及して拡張すると、エラーを発生しない列のみを変換するためにerrors=ignore
引数を使用することができます。これは特に構文を単純化します。明らかに、エラーを無視するときには注意が必要ですが、この作業にはとても便利です。
df = pd.DataFrame(np.random.Rand(3,4), columns=list("ABCD"))
df['E'] = list("XYZ")
df.astype(int, errors='ignore')
A B C D E
0 0 0 0 0 X
1 0 0 0 0 Y
2 0 0 0 0 Z
astype docsから:
エラー:{「上げる」、「無視する」、デフォルトは「上げる」
提供されたdtypeに対する無効なデータに対する例外の発生を制御します。
- raise:例外の発生を許可します
- 無視:例外を抑制します。エラー時にオリジナルのオブジェクトを返す
バージョン0.20.0の新機能。
**
**
df = pd.DataFrame(np.random.Rand(5,4) * 10, columns=list("PQRS"))
df
P Q R S
0 4.395994 0.844292 8.543430 1.933934
1 0.311974 9.519054 6.171577 3.859993
2 2.056797 0.836150 5.270513 3.224497
3 3.919300 8.562298 6.852941 1.415992
4 9.958550 9.013425 8.703142 3.588733
float_col = df.select_dtypes(include = ['float64']) # This will select float columns only
# list(float_col.columns.values)
for col in float_col.columns.values:
df[col] = df[col].astype('int64')
df
P Q R S
0 4 0 8 1
1 0 9 6 3
2 2 0 5 3
3 3 8 6 1
4 9 9 8 3
これは、可能な限り小さい整数型に浮動小数点変換する単純な関数ですが、安全に実行できる場合に限ります(数値の精度を損なうことなく)。つまり、100は整数から浮動小数点数に変換できますが、99.9は変換できません。
import numpy as np
import pandas as pd
def float_to_int( s ):
if ( s.astype(np.int64) == s ).all():
return pd.to_numeric( s, downcast='integer' )
else:
return s
# small integers are downcast into 8-bit integers
float_to_int( np.array([1.0,2.0]) )
Out[1]:array([1, 2], dtype=int8)
# larger integers are downcast into larger integer types
float_to_int( np.array([100_000.,200_000.]) )
Out[2]: array([100000, 200000], dtype=int32)
# if there are values to the right of the decimal
# point, no conversion is made
float_to_int( np.array([1.1,2.2]) )
Out[3]: array([ 1.1, 2.2])