亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅選擇包含特定字符的列

僅選擇包含特定字符的列

慕村225694 2023-08-15 17:30:20
我有一個最初存儲為所有類型 str 的數字 df ,有時列中的數據存儲為百分比,但并不總是相同的列。我不知道哪一列是百分比還是數字。如果它存儲為百分比,我需要將其轉換為小數。如何找到哪些列是百分比,然后僅將這些列轉換為小數一個例子name  date  col1  col2  col3  col4a     9/17  1.23  4.90% 3.00  100.00%b     9/17  2.00  6.10% 5.00  253.90%c     9/17  6.71  7.90% 7.00  98.00%期望的輸出:name  date  col1  col2  col3  col4a     9/17  1.23  0.049 3.00  1.00b     9/17  2.00  0.061 5.00  2.539c     9/17  6.71  0.079 7.00  0.98我試過df=df.apply(pd.to_numeric, errors="ignore")df.iloc[:,2:]=df.iloc[:,2:].apply(lambda x: x.str.strip('%').astype(float)/100, axis=1)但這是將所有類型為 float 的列設置為 nan。如果列一開始都是 str 類型,那么第二行會將所有值除以 100,這是我不想要的。因此我需要查找并選擇僅包含 % 的整個列就像是df.loc[:,df.apply(lambda x: x.str.contains("%"), axis=1)]除此之外,這將為您提供多維鍵錯誤的索引
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

filter以下是使用和select_dtypes查找列的一種方法:


cols = df.filter(like="col").select_dtypes("object").columns

或者,您可以提取 1 行并查找%:


cols = df.columns[df.loc[0].astype(str).str.endswith("%")]

兩者都會為您提供列名稱。


df[cols] = df[cols].replace("%", "", regex=True).astype(float)/100


print (df)


  name  date  col1   col2  col3   col4

0    a  9/17  1.23  0.049   3.0  1.000

1    b  9/17  2.00  0.061   5.0  2.539

2    c  9/17  6.71  0.079   7.0  0.980


查看完整回答
反對 回復 2023-08-15
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

這可能會讓您開始:


import numpy as np


def percent_to_float(percent: str) -> float:

    return float(percent[:-1])/100


df.select_dtype(object).apply(np.vectorize(percent_to_float))   

這將獲取所有列dtype=object(字符串數據存儲在dtype=objectin 中),并應用將百分比字符串(如 )轉換為浮點數(如 )的pandas函數。4.5%0.045


查看完整回答
反對 回復 2023-08-15
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號