我有以下資料框:
symbol Open close
SPY 34,2 33,2
AMZN 30.2 10,2
.................
我想創建一個函式,將字串中的每個字符轉換為 ASCII。然后,此函式將應用于符號欄位,其值將放置在一個新欄位(稱為“id”)中。最終的資料框將如下所示:
symbol Open close id
SPY 34,2 33,2 838089
AMZN 30.2 10,2 65779078
這就是我所做的
def symbolid(x):
strAscii = ''
for i in range (len(x)):
strAscii = strAscii str(ord(x[i]))
print(x)
return strAscii
df['id'] = df.apply(lambda x: symbolid(df['symbol']), axis=1)
我得到 TypeError: ord() expected a character, but string of length 3 found
任何幫助將不勝感激/使用python 3.6
uj5u.com熱心網友回復:
在您的 lambda 函式中,您使用整列作為引數,這是錯誤的來源,您只能使用符號列。
import pandas as pd
data = {
"symbol": ["SPY","AMZN"],
"Open": [34.2 , 33.2],
"close":[30.2 ,10.2]
}
df = pd.DataFrame(data)
def symbolid(x):
strAscii = ''
for i in range (len(x)):
strAscii = strAscii str(ord(x[i]))
print(x)
return strAscii
df['id'] = df['symbol'].apply(lambda x: symbolid(x))
print(df)
uj5u.com熱心網友回復:
你沒那么遠。但是在您的 lambda 函式中,您仍然df應該使用x:
df['id'] = df.apply(lambda x: symbolid(x['symbol']), axis=1)
節目
SPY
SPY
SPY
AMZN
AMZN
AMZN
AMZN
并按預期給出
df
symbol Open close id
0 SPY 34,2 33,2 838089
1 AMZN 30.2 10,2 65779078
但是您的代碼效率不高,因為:
- 在您的函式中,當您可以加入迭代器時添加到字串
- 當您可以簡單地轉換一列時,您將每一行轉換為一個系列
到底,
df['symbol'].transform(lambda x: ''.join(str(ord(i)) for i in x))
還給出了期望的資料框
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409622.html
標籤:
上一篇:為什么總是有例外?
