我正在嘗試清理資料框并且代碼適用于整個 dtaframe 但是當我測驗代碼段時,我收到一個錯誤:
我的資料框:
df:
Unnamed: 0 game score home_odds draw_odds away_odds country league datetime home_team away_team home_score away_score
1114366 1114366 Estrella - Britannia 1:7 2.67 3.87 2.14 Aruba Division di Honor 2021-11-01 00:00:00 Estrella Britannia 1 7
1114367 1114367 Aucas - LDU Quito 1:0 2.75 3.44 2.36 Ecuador Liga Pro 2021-11-01 00:00:00 Aucas LDU Quito 1 0
1114368 1114368 Ocotal - Juventus Managua 1:0 2.49 3.12 2.6 Nicaragua Liga Primera 2021-11-01 00:00:00 Ocotal Juventus Managua 1 0
1114369 1114369 Jalapa - Real Madriz 0:1 2.29 3.15 2.82 Nicaragua Liga Primera 2021-11-01 00:00:00 Jalapa Real Madriz 0 1
1114370 1114370 Sporting San Jose - Grecia 2:1 2.28 3.29 2.94 Costa Rica Primera Division 2021-11-01 01:00:00 Sporting San Jose
運行此命令時出現錯誤:
m = df[['home_odds', 'draw_odds', 'away_odds']].agg(lambda x: x.str.count('/'), 1).ne(0).all(1)
函式執行什么操作?
錯誤:
File "C:/Users/harsh/AppData/Roaming/JetBrains/PyCharmCE2021.2/scratches/scratch_2.py", line 35, in <module>
m = df[['home_odds', 'draw_odds', 'away_odds']].agg(lambda x: x.str.count('/'), 1).ne(0).all(1)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\frame.py", line 8551, in aggregate
result = op.agg()
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\apply.py", line 715, in agg
result = self.obj.apply(self.orig_f, axis, args=self.args, **self.kwargs)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\frame.py", line 8741, in apply
return op.apply()
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\apply.py", line 688, in apply
return self.apply_standard()
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\apply.py", line 812, in apply_standard
results, res_index = self.apply_series_generator()
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\apply.py", line 828, in apply_series_generator
results[i] = self.f(v)
File "C:/Users/harsh/AppData/Roaming/JetBrains/PyCharmCE2021.2/scratches/scratch_2.py", line 35, in <lambda>
m = df[['home_odds', 'draw_odds', 'away_odds']].agg(lambda x: x.str.count('/'), 1).ne(0).all(1)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\generic.py", line 5487, in __getattr__
return object.__getattribute__(self, name)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\accessor.py", line 181, in __get__
accessor_obj = self._accessor(obj)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\strings\accessor.py", line 168, in __init__
self._inferred_dtype = self._validate(data)
File "C:\Users\harsh\OneDrive\Documents\VENV\lib\site-packages\pandas\core\strings\accessor.py", line 225, in _validate
raise AttributeError("Can only use .str accessor with string values!")
AttributeError: Can only use .str accessor with string values!
uj5u.com熱心網友回復:
錯誤是意料之中的,因為函式 count/所以需要列中的字串'home_odds', 'draw_odds', 'away_odds',但是有數字,所以引發錯誤。
全部一起:
df[['home_odds', 'draw_odds', 'away_odds']].agg(lambda x: x.str.count('/'), 1).ne(0).all(1)
x.str.count('/') # count `/`
.agg(lambda x: x.str.count('/'), 1) # count per rows in specified columns
.ne(0) #test if not equal 0, means no / in specified columns
.all(1) # test if all values are Trues per rows, same like .all(axis=1)
如果可能,混合字串與數字 add astype(str),如果回傳所有Trues 則意味著沒有值/:
m = df[['home_odds', 'draw_odds', 'away_odds']].astype(str).agg(lambda x: x.str.count('/'), 1).ne(0).all(1)
測驗是否有一些Falses - 獲取具有至少一個 / 每個指定列的行:
print (df.loc[~m, ['home_odds', 'draw_odds', 'away_odds']])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/349004.html
下一篇:無法將字串轉換為浮動“價格”
