我有一個大約 50,000 行的 excel 檔案付款,其結構如下:

我通過以下代碼將資料從 excel 匯入到 python:
test= pd.read_excel(r'D:\\Users\\Desktop\\test_stack.xlsx')
但是,當我想執行下面指示的自定義函式時,會生成以下錯誤:
型別錯誤:不支持 / 的運算元型別:'str' 和 'str'
顯然,E 列被讀取為字串 (str),因此這些函式無法執行。需要注意的是,這些函式是迭代的,所以它們會遍歷{} 中的每個元素,并以逗號分隔列支付,執行操作,然后創建相應的列。
同樣,當我手動執行創建資料幀的函式時,函式執行沒有問題,但我需要以提到的 excel 檔案的格式執行它們。
test= pd.DataFrame({'id':['F8510004123','A3100002543','Z3510002123'],
'product':['retail','retail','others'],
'type':['E','E','D'],
'quantity':[25,34,150],
'nro_ope':[2,3,26],
'payments':[[1030.97,1030.97,584.91],[1610.74,1610.74,1610.74,1610.74,1611.14],[1007.52,1007.52,1007.52,1007.52,500,500,852.95]]
})
;
def var_payments (x) :
variation = [round(abs(a/b -1),3) for a,b in permutations(x,2)]
return variation
;
def count_var_pay (x) :
count = 0
for element in x:
if element >= 0.05 :
count = 1
else:
0
return count
;
def flag_var_payments (x) :
if x >= 2 :
return 'Yes'
else :
return 'No'
;
test['var_payments'] = test.payments.apply(lambda x:var_payments(x))
test['count_p'] = test.var_payments.apply(lambda x:count_var_pay(x))
test['flag'] = test.count_p.apply(lambda x:flag_var_payments(x))
我怎么能做到?從excel檔案更改列付款的格式?轉換列資料?
我很注意你的評論。
感謝您的支持。
uj5u.com熱心網友回復:
轉換{}為[]然后用于pd.eval轉換為串列:
df['payments'] = pd.eval(df['payments'].replace({r'{': '[', r'}': ']'}, regex=True))
輸出:
>>> df
id product type quantity nro_ope payments
0 F8510004123 retail E 25 2 [1030.97, 1030.97, 584.91]
1 A3100002543 retail E 34 3 [1610.74, 1610.74, 1610.74, 1610.74, 1611.14]
2 Z3510002123 others D 150 26 [1007.52, 1007.52, 1007.52, 1007.52, 500, 500,...
>>> df.iloc[0, 5]
[1030.97, 1030.97, 584.91]
>>> type(df.iloc[0, 5])
list
uj5u.com熱心網友回復:
我不知道您在讀取 ??excel 檔案時如何處理“{}”,但是如果您在測驗DataFrame 中更改了付款,您可能會遇到相同的錯誤:
'payments':["{1030.97,1030.97,584.91}","{1610.74,1610.74,1610.74,1610.74,1611.14}","{1007.52,1007.52,1007.52,1007.52,500,500,852.95}"]
型別錯誤:不支持 / 的運算元型別:'str' 和 'str'
希望能有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397335.html
上一篇:過濾/匯總物件中的數字串列
