web-dev-qa-db-ja.com

pandas(ValueError)では文字列を浮動小数点に変換できません

次のようなJSON出力からデータフレームを作成しました。

        Total Revenue    Average Revenue    Purchase count    Rate
Date    
Monday  1,304.40 CA$     20.07 CA$          2,345             1.54 %

保存された値は、JSONから文字列として受信されます。私は。。をしようとしています:

1)エントリ内のすべての文字を削除します(例:CA $または%)2)レートと収益の列をフロートに変換します3)カウント列をintに変換します

私は次のことを試みました:

df[column] = (df[column].str.split()).apply(lambda x: float(x[0]))

コマの値がある場合を除いて、正常に機能します(例:143は機能しますが、1,465は機能しません)。

「、」を「」などに置き換えるためにいくつかの関数を使用してみました。これまでのところ、何も機能しません。常に次のエラーが表示されます。

ValueError:文字列を浮動小数点に変換できませんでした: '1,304.40'

5
John_Mtl

これらの文字列には、3桁ごとの区切り文字としてコンマが含まれているため、floatを呼び出す前にそれらを削除する必要があります。

df[column] = (df[column].str.split()).apply(lambda x: float(x[0].replace(',', '')))

これは、splitlambda内に移動することにより、少し簡略化できます。

df[column] = df[column].apply(lambda x: float(x.split()[0].replace(',', '')))
3
DeepSpace

list内包表記を使用した別のソリューション、必要に応じてstringfunctionsSeriesDataFrameの列)でのみ機能- str.split および str.replace

df = pd.concat([df[col].str.split()
                       .str[0]
                       .str.replace(',','').astype(float) for col in df], axis=1)

#if need convert column Purchase count to int
df['Purchase count'] = df['Purchase count'].astype(int)
print (df)
         Total Revenue  Average Revenue  Purchase count  Rate
Date                                                        
Monday         1304.4            20.07            2345  1.54
1
jezrael