我需要用另一個串列的平均值計算一個串列。更準確地說,輸入串列具有以下形式:
input_list =
['1.538075/42.507325',
'1.537967/42.507690',
'1.538292/42.507742',
'1.538399/42.507376',
'1.538075/42.507325']
我需要用斜杠(“/”)之前和之后的值的平均值計算一個串列,就像這個結果:
desired_output =
[1.5381616, 42.5074916]
我可以使用以下代碼正確獲得所需的輸出:
desired_output = pd.Series(input_list)\
.apply(lambda r: pd.Series(r.split('/')))\
.astype(float)\
.mean()\
.tolist()
但是,我有大量的輸入串列,并且建議的代碼有點慢,所以我需要找到一種更有效的方法來做到這一點。
有什么建議么?
uj5u.com熱心網友回復:
你在這里并不需要熊貓,一個簡單的串列理解應該可以作業:
input_list = ['1.538075/42.507325',
'1.537967/42.507690',
'1.538292/42.507742',
'1.538399/42.507376',
'1.538075/42.507325']
from statistics import mean
out = [mean(map(float, x)) for x in zip(*(x.split('/') for x in input_list))]
輸出:[1.5381616, 42.5074916]
或使用 numpy:
np.vstack([np.fromstring(s, sep='/') for s in input_list]).mean(0).tolist()
uj5u.com熱心網友回復:
.apply是緩慢的部分,但幸運的是 Pandas 有.str向量化字串操作的訪問器。這應該快得多:
desired_output = (pd.Series(input_list)
.str.split('/', expand=True)
.astype(float)
.mean()
.tolist())
uj5u.com熱心網友回復:
創建一個 numpy 陣列dtype=float,然后計算平均值axis=0
np.array([s.split('/') for s in input_list], dtype=float).mean(0)
array([ 1.5381616, 42.5074916])
uj5u.com熱心網友回復:
另一種方式,使用熊貓和理解 -
pd.DataFrame([_.split('/') for _ in input_list]).astype(float).mean().to_list()
# [1.5381616, 42.5074916]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/473603.html
標籤:Python python-3.x 熊猫 列表 意思是
