- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 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
或者,如果您想使用 sklearn_pandas
中的 DataFrameMapper
和 FunctionTransformer
,
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
或者使用numpy.vectorize
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
关于python - 如何使 FunctionTransformer 在 DataFrameMapper 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670335/
我想在数据帧的所有 float64 列上使用 DataFrameMapper Imputer+Scaler 映射。我的代码适用于 StandardScaler,但当我添加 Imputer 时,映射器仅
我的 pandas DataFrame 中有一个列,如下所示: df = pd.DataFrame([ ['26.6 km'], ['19.67 km'], ['18.2 km
Sklearn 管道:http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html 数据帧映射器:ht
我正在尝试使用 sklearn_pandas DataFrameMapper。这会接收列名称以及该列所需的预处理转换函数。像这样, mapper = sklearn_pandas.DataFrameM
我能够复制 Github 存储库中给出的示例。但是,当我在自己的数据上尝试时,我得到了 ValueError。 下面是一个虚拟数据,它给出了与我的真实数据相同的错误。 import pandas as
我是一名优秀的程序员,十分优秀!