如果某些列是數字,我想將所有列轉換為浮動。
這是我迄今為止嘗試過的:
for columns in range(len(df.columns)):
for rows in range(len(df)):
if str(df.iloc[rows,columns]).replace('.','',1).isdigit() == True:
df.iloc[rows,columns] = float(df.iloc[rows,columns])
它運行良好,但由于資料幀大小的原因需要很長時間才能運行。有沒有人對更簡單、更高效的代碼有任何想法?
uj5u.com熱心網友回復:
這回答了你的問題了嗎?
df = df.apply(lambda i: i.apply(lambda x: float(x) if str(x).replace('.','',1).isdigit() else x))
uj5u.com熱心網友回復:
您可以應用于pandas.to_numeric所有列。通過指定errors='coerce'非數字值將被轉換為 NaN。
https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html
然后將 DataFrame 傳遞給以fillna使用原始非數字值填充 NaN。
這應該比大型 DataFrame 的另一個答案更快。
>>> df = pd.DataFrame([["x", 1, "2.1"], [3.2, "y", "5."]], columns=list("ABC"))
>>> df
A B C
0 x 1 2.1
1 3.2 y 5.
>>> df = (
df.apply(pd.to_numeric, errors='coerce', downcast='float')
.fillna(df)
)
>>> df
A B C
0 x 1 2.1
1 3.2 y 5
# confirm that the values are floats
>>> type(df.at[0,'C'])
float
>>> type(df.at[1,'C'])
float
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340516.html
上一篇:如何將水平線添加到熊貓df圖中?
下一篇:洗掉具有一定數量NA的行
