python - 如何使 FunctionTransformer 在 DataFrameMapper 中工作
问题描述
我的 pandas DataFrame 中有一个如下所示的列:
df = pd.DataFrame([
['26.6 km'],
['19.67 km'],
['18.2 km'],
['20.77 km'],
['15.2 km'],
], columns=['Mileage'])
我有一个从列中删除“km”的函数:
def remove_words(column):
return column.str.split(' ').str[0]
当我把它放在我的 DataFrameMapper 中时:
mapper = DataFrameMapper([
('Mileage', [FunctionTransformer(remove_words)]),
], df_out=True)
...它返回错误“'numpy.ndarray'对象没有属性'str'”
帮助!
解决方案
df['Mileage'] = df['Mileage'].str.extract('(\d*\.?\d*)', expand=False).astype(float)
或者,
df['Mileage'] = df['Mileage'].str.replace('[^\d.]', '').astype(float)
这是示例,
>>> import pandas as pd
>>> df = pd.DataFrame([
['26.6 km'],
['19.67 km'],
['18.2 km'],
['20.77 km'],
['15.2 km'],
], columns=['Mileage'])
>>> df['Mileage'].str.extract('(\d*\.?\d*)', expand=False).astype(float)
0 26.60
1 19.67
2 18.20
3 20.77
4 15.20
Name: Mileage, dtype: float64
>>> df['Mileage'].str.replace('[^\d.]', '').astype(float)
0 26.60
1 19.67
2 18.20
3 20.77
4 15.20
Name: Mileage, dtype: float64
或者,如果您想使用DataFrameMapper
and FunctionTransformer
from sklearn_pandas
,
from sklearn_pandas import DataFrameMapper, FunctionTransformer
def remove_words(val):
return val.split(' ')[0]
mapper = DataFrameMapper([
('Mileage', [FunctionTransformer(remove_words)]),
], df_out=True)
print(mapper.fit_transform(df))
Mileage
0 26.6
1 19.67
2 18.2
3 20.77
4 15.2
对于sklearn.preprocessing.FunctionTransformer
,
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import FunctionTransformer
import numpy as np
def remove_words(vals):
return np.array([v[0].split(' ')[0] for v in vals])
mapper = DataFrameMapper([
(['Mileage'], [FunctionTransformer(remove_words, validate=False)]),
], df_out=True)
print(mapper.fit_transform(df))
Mileage
0 26.6
1 19.67
2 18.2
3 20.77
4 15.2
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import FunctionTransformer
import numpy as np
func = np.vectorize(lambda x: x.split(' ')[0])
def remove_words(vals):
return func(vals)
mapper = DataFrameMapper([
(['Mileage'], [FunctionTransformer(remove_words, validate=False)]),
], df_out=True)
print(mapper.fit_transform(df))
Mileage
0 26.6
1 19.67
2 18.2
3 20.77
4 15.2
推荐阅读
- php - 在列表中查找特定数字并回显包含该数字的行
- javascript - D3.js 无法更新组中的现有元素
- postgresql - 在 PostgreSQL 9.4 上计算两个小时之间的差异
- android - 在 Firestore 事务中更新同一文档的多个字段时的定价
- excel - 获取过滤后的 ListObject 的使用范围
- common-lisp - 在调试器中,我们可以让 `q` 选择给定的重启吗?
- python - 在 Visual Studio 中运行 Python 代码 - 安装 pip 不起作用
- haskell - 屏幕不显示,Haskell 中的 Console.ReadLine()?
- javascript - 将 AngularJS 控制器文件与本地 HTML 页面分开
- spring - 如何避免 org.springframework.transaction.UnexpectedRollbackException?