拆分字符串并将语言环境应用于 Pandas 系列的每一行

Split string and apply locale to every row of Pandas Series

我想对以下 df 的 amount 列进行两次转换:

Address                                         type    amount
0   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow 250,000 VSO
1   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow 250,000 VSO
2   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow 250,000 VSO
  1. 我想从所有行中删除“VSO”子字符串。
  2. 我想将 locale.setlocale(locale.LC_ALL, 'en_us') 应用于每一行,将每个字符串转换为遵循该格式的浮点数。

我目前的密码是:

locale.setlocale(locale.LC_ALL, 'en_us')
df_test['amount'].str.split(' VSO')[0]
locale.atof((str(df_test['amount'].values)))

这让我产生了错误:

ValueError: could not convert string to float: "['250000 VSO' '250000 VSO' '250000 VSO' '33333 VSO' '33333 VSO'\n '10400000 VSO' '170833 VSO' '170833 VSO' '170833 VSO' '170833 VSO'\n

在使用 rstrip 删除尾随的“VSO”后尝试使用 apply:

import locale
locale.setlocale(locale.LC_ALL, 'en_us')
df["amount"] = df["amount"].str.rstrip(" VSO").apply(locale.atof)

>>> df
                                      Address     type    amount
0  0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow  250000.0
1  0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow  250000.0
2  0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow  250000.0

我认为@not_speshal 完美地回答了这个问题。
在字符串稍微变化的情况下(例如 VSO 发生变化),我们可以使用以下 regex :

>>> df['amount'] = df.amount.str.extract(r"(\d+\,\d+|\d+)")[0].str.replace(',', '').astype(float)
>>> df
    Address                                     type        amount
0   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow     250000.0
1   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow     250000.0
2   0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367  outflow     250000.0