[英]Pandas - extract numeric values from string column using replace + regex
我有一個 dataframe 的列,其中包含許多值范圍。 下面的例子:
dirty_col = pd.Series([5, 6, '1-2', '40-60', 10])
我正在嘗試清理此列,生成一個具有平均值范圍的新列。 預期結果:
clean_col = pd.Series([5, 6, 1.5, 50, 10])
我正在嘗試 map 在矢量化映射函數中使用正則表達式,例如:
clean_col = pd.Series([5, 6, '1-2', '40-60', 10]).replace({'^[0-9]-[0-9]$':--average here--},regex=True)
但我被困在這里。 如何使用映射字典和正則表達式獲得上述預期結果? 我知道我可以直接在 dataframe 中工作,將文本按“-”分割,然后取平均值,但是,我已經在上面的字典中有許多其他的清理映射,繼續使用同一個字典會更方便和更干凈所有的清潔。
我認為我正在尋找的解決方案可能使用 lambdas,或者從字典內部調用的額外 function,但我無法弄清楚如何做到這一點。
我不認為pandas.Series.replace
支持可調用。 使用pandas.eval
的一種可能方法:
dirty_col.replace({'^(\d+)-(\d+)$': "(\\1+\\2)/2"},regex=True).apply(pd.eval)
Output:
0 5.0
1 6.0
2 1.5
3 50.0
4 10.0
dtype: float64
您可以嘗試series.str.replace
與repl
作為可調用和fillna
返回
f_repr = lambda m: str(sum(map(int, m[0].split('-')))/2)
s_out = s.str.replace(r'^[0-9]+-[0-9]+$', f_repr).fillna(s)
Out[30]:
0 5
1 6
2 1.5
3 50.0
4 10
dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.