在一列中包含字符串和数字数据的数据集

数据挖掘 Python scikit-学习 熊猫 麻木的
2022-02-17 12:31:15

这是我为预处理数据集编写的代码。有用

import numpy as np
import pandas as pd
from sklearn import svm

%matplotlib inline
import matplotlib.pyplot as plt


from sklearn.impute import SimpleImputer
import seaborn as sns; sns.set(font_scale=1.2)

stock=pd.read_csv("C:/Users/Dulangi/Downloads/winequality-red.csv")
stock.head()
X= stock.iloc[:,0:5].values
y= stock.iloc[:,5].values

g=sns.lmplot('alcohol','quality',data=stock,height=7, truncate=True, scatter_kws={"s":100})
imputer = SimpleImputer( strategy = "mean")

imputer = imputer.fit(X[:,1:2])
imputer.fit_transform(X[:,1:2])

imputer = imputer.fit(X[:,4:5])
imputer.fit_transform(X[:,4:5])

我想知道如果我在一列中同时包含字符串和数字数据怎么办,如何预处理这些数据以包含所有数字数据?

1个回答

通常熊猫应该自动识别数字类型。如果您的情况不是这样,则似乎存在格式问题。

与其将所有内容读入字符串,不如尝试让 pandas 以正确的形式直接读取类型。首先,我会尝试将 dict 中的列类型传递给dtype,如:

pd.read_csv(file_name, dtype={'int_column_name': 'int32', 'float_column_name': 'float32'})

如果这不适用,因为 pandas 无法自动识别该格式,您可能需要尝试其他一些选项。

例如,如果只是小数点或千位分隔符在您的数据中有所不同,您可以将其设置在read_csv(thousands和/或decimal) 中的相应关键字上。

如果这还不够,因为您有一些特殊的格式等,您还可以传递您自己的转换器以将字符串解析为列所需的数据类型,例如如何使用货币单位:

import re
mon_re=re.compile('(?P<value>[0-9.]*)([^0-9].*)?')
def strip_off_currency(currency_string):
    m=mon_re.match(currency_string)
    if m is not None:
        return np.float32(m.group('value'))
    else:
        return np.NaN

pd.read_csv(file_name, dtype={'int_column_name': 'int32', 'float_column_name': 'float32'}, converters={'monetary_ammount': strip_off_currency})

我更喜欢这种方式而不是将所有内容读入内存并在那里处理的原因是,它需要更少的内存,并且如果您只处理一次值(至少如果您不需要传递转换器)可能也会更快。