通過這行代碼,我試圖從資料框中洗掉一整行,該行在任何列值中都不包含字串“-->”。
try:
for j in range(len(df)):
flg = 0
for i in df.columns:
if df[i].astype(str).str.contains('-->').iloc[j]:
flg = 1
if flg == 0:
df.drop(df.index[j], axis=0, inplace=True)
except:
pass
這是一個作業代碼。問題是我們能否以更優化的方式撰寫這段代碼,因為如果我們在資料幀中有 20K 或更多行,這段代碼將花費更多時間。
uj5u.com熱心網友回復:
你可以矢量化:
mask = df.astype(str).apply(lambda column : column.str.contains('-->')).any(axis=1)
df = df[mask]
uj5u.com熱心網友回復:
僅選擇object列 byDataFrame.select_dtypes并測驗是否存在-->子字串、數字和日期時間列未測驗并過濾其中至少一個值與 in 匹配的所有DataFrame.any行boolean indexing:
df = df[df.select_dtypes(object).apply(lambda x : x.str.contains('-->')).any(axis=1)]
或者將所有列轉換為字串,它應該更慢,因為測驗了所有列(也是沒有 substring 的數字-->):
df = df[df.astype(str).apply(lambda x : x.str.contains('-->')).any(axis=1)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459191.html
標籤:python-3.x 熊猫 数据框
下一篇:從熊貓的資料透視表中選擇特定行
