我正在嘗試將以下 DataFrame(包含幾個“N/As”)轉換為浮動,以便我可以執行百分比更改操作:d = pd.DataFrame({"A":['N/A','$10.00', '$5.00'], "B":['N/A', '$10.00', '-$5.00']})最后,我希望結果是:(更新:我不想刪除原始的 N/A 值。我想將它們作為占位符保留在那里。)因為沒有處理負數的任何標志,所以我不能使用:pct_change(-1)所以,我需要使用:d['A'].diff(-1)/d['A'].shift(-1).abs()但是,我收到錯誤:TypeError: unsupported operand type(s) for -: 'str' and 'str'第一步,我試圖將數據從對象/字符串轉換為浮點數,但輸出是意外的(對我而言)。我得到浮點數 'NaNs' 而不是實際數字。>d['A_float'] = pd.to_numeric(d['A'], errors='coerce')>d A B A_float0 N/A N/A NaN1 $10.00 -$100.00 NaN2 $5.00 -$5.00 NaN>d.dtypesA objectB objectA_float float64dtype: object作為一個簡單的測試,我嘗試從值中減去“1”,但仍然得到浮點“NaN”。>d['A_float_minus1_test'] = pd.to_numeric(d['A'], errors='coerce')-1>d A B A_float A_float_minus1_test0 N/A N/A NaN NaN1 $10.00 -$100.00 NaN NaN2 $5.00 -$5.00 NaN NaN>d.dtypesA objectB objectA_float float64A_float_minus1_test float64dtype: object有沒有一種簡單的方法可以獲得以下結果?我的想法是將每個DataFrame列單獨更改為浮動,然后執行操作。必須有更簡單的方法。期望的輸出:(更新:我不想刪除原始的 N/A 值。我想將它們作為占位符保留在那里。)
2 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
要將您的列從字符串轉換為浮點數,您可以使用apply,如下所示:
d['A_float'] = d['A'].apply(lambda x: float(x.split('$')[1]) if x != '' else 0.0)
本x.split('$')[1]是用來去除$字符(最終前負)。
然后我不確定您要做什么,但是如果您要計算 A 與 B 的百分比,則可以這樣使用np.vectorize:
d['Percent'] = np.vectorize(percent)(d['A'],d['B'])
def percent(p1, p2):
return (100 * p2) / p1
添加回答
舉報
0/150
提交
取消