這看起來很簡單,但我就是想不通。
我有一個帶有 GBpence、Euro 和 USD 金額列的資料框。我需要一個以英鎊為單位的新列,我能想到的唯一方法是首先將金額欄位轉換為字串,將金額與貨幣符號分開,然后使用 numpy 執行條件計算。
df = pd.DataFrame({'date': ['2018-11-22','2018-11-23','2018-11-24'],
'amount': ['3.80p','$4.50','\N{euro sign}3.40'],
'usd-gbp':['0.82','0.83','0.84'],
'eur-gbp':['0.91','0.92','0.93']})

我正在嘗試將金額列轉換為字串,以便我可以提取貨幣和浮動金額,但它只是將所有行轉換為相同的字串。
df['new'] = str(df['amount'])

預期輸出只是字串格式的數量值,因此我可以對它們執行切片。

任何幫助,將不勝感激。謝謝。
uj5u.com熱心網友回復:
您可以使用replace'0.82*' 和 '0.91*' 替換貨幣符號,然后使用以下方法評估操作pd.eval:
to_gbp = {'p': '*1', '\$': '0.82*', '€': '0.91*'}
df['gbp'] = pd.eval(df['amount'].replace(to_gbp, regex=True))
print(df)
# Output:
amount usd-gbp eur-gbp gbp
0 3.80p 0.82 0.91 3.800
1 $4.50 0.82 0.91 3.690
2 €3.40 0.82 0.91 3.094
詳情replace:
>>> df['amount'].replace(to_gbp, regex=True)
0 3.80*1
1 0.82*4.50
2 0.91*3.40
Name: amount, dtype: object
更新
我沒有提到匯率會根據日期而有所不同。我已經更新了這個問題,所以請展示這個。這仍然可以使用“替換”嗎?
創建一個自定義函式并將其應用于每一行:
def convert(row):
d = {'$': 'usd-gbp', '€': 'eur-gbp'}
c = row['amount'][0]
return float(row['amount'][1:]) * float(row[d[c]]) \
if c in d else float(row['amount'][:-1])
df['gbp'] = df.apply(convert, axis=1)
print(df)
# Output:
date amount usd-gbp eur-gbp gbp
0 2018-11-22 3.80p 0.82 0.91 3.800
1 2018-11-23 $4.50 0.83 0.92 3.735
2 2018-11-24 €3.40 0.84 0.93 3.162
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373417.html
上一篇:使用遞回函式的C字串反轉
