9

read_csvCSVファイルをPandasデータフレームに読み込むために使用しています。私のCSVファイルには、多数の小数/浮動小数点が含まれています。数値は、ヨーロッパの10進表記を使用してエンコードされます。

1.234.456,78

これは、「。」を意味します は千単位の区切り文字として使用され、「、」は小数点です。

パンダ0.8。read_csv千の区切り文字を設定するための「千」と呼ばれる引数を提供します。小数点を提供するための追加の引数もありますか?いいえの場合、ヨーロッパ式の10進数を解析する最も効率的な方法は何ですか?

現在、私は文字列置換を使用していますが、これはパフォーマンスが大幅に低下すると考えています。私が使用しているコーディングは次のとおりです。

# Convert to float data type and change decimal point from ',' to '.'
f = lambda x: string.replace(x, u',', u'.')
df['MyColumn'] = df['MyColumn'].map(f)

どんな助けでも大歓迎です。

4

2 に答える 2

16

ヨーロピアンスタイルの数値の場合は、のthousandsおよびdecimalパラメータを使用しますpandas.read_csv

例えば:

pandas.read_csv('data.csv', thousands='.', decimal=',')

ドキュメントから:

数千

str、オプションの千単位の区切り文字。

10進数

str、デフォルト'。' 小数点として認識する文字(例:ヨーロッパのデータには「、」を使用)。

于 2019-05-13T14:47:24.770 に答える
9

convertersでkwを使用できますread_csv。このように与えられ/tmp/data.csvた:

"x","y"                                                                         
"one","1.234,56"                                                                
"two","2.000,00"   

できるよ:

In [20]: pandas.read_csv('/tmp/data.csv', converters={'y': lambda x: float(x.replace('.','').replace(',','.'))})
Out[20]: 
     x        y
0  one  1234.56
1  two  2000.00
于 2012-08-01T16:21:23.337 に答える