如何在python中忽略.csv文件中的nan?

8i9zcol2  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(632)

我在读取.csv文件的列时遇到问题。我有这个密码:


# Importing the libraries

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

# Importing the dataset

dataset = pd.read_csv('D:/CTU/ateroskleroza/development/results_output6.csv')
print(dataset.head())

X = dataset.iloc[:, 2:16].values
y = dataset.iloc[:, 0].values

# Splitting the dataset into the Training set and Test set

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)

classifier = make_pipeline(StandardScaler(), SVC(gamma='auto'))
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

# Making the Confusion Matrix

cm = confusion_matrix(y_test, y_pred)
print(cm)

# Generating accuracy, precision, recall and f1-score

target_names = ['Progressive','Stable']
print(classification_report(y_test, y_pred, target_names=target_names))

.csv如下所示:


根据图片的名称,他们有一些列,其他一些与楠。问题是,当我尝试执行此代码时,出现以下错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

那么我怎么能忽略nan而只使用数字呢(我不想删除空列,只是在执行时忽略nan)。

mtb9vblg

mtb9vblg1#

我是根据个人经验写这个答案的。如果你想要一个更详细的答案,可以考虑用我们可以使用的数据集更新你的帖子,说明模型应该预测什么并描述特性。
@simpleapp建议在缩放数据和拟合模型之前用零替换空值。在注解中,您似乎关心在最终模型中输入空值的影响。
在处理缺失数据时,必须权衡插补值的利弊。如果您决定忽略具有空值的观测值(通过删除列或整个观测值),则可能会遗漏一些真正重要的信息,并且除非新观测值的数据已完全填满,否则您将无法对其进行预测。同样,如果您不小心用一些随机值来填充空值,您可能会给模型引入偏差。
如果您正确地输入值,您的模型将能够处理丢失的数据,而不会影响其准确性。可悲的是,估算价值与其说是一门硬科学,不如说是一门艺术。
我不知道你的数据是什么意思,但把年龄作为预测心脏病风险的独立变量。扪心自问:如果缺少一个值,我最好忽略观察结果,或者我可以用一个值来填补空白,平均来说,这个值不应该离患者真正未观察到的年龄太远吗?
如果你决定用一些值来填充缺失的信息,我建议四种非常简单的方法:


# Fill with minimum value

df = df.fillna(df.mean(), axis=1)

# Fill with median value

df = df.fillna(df.median(), axis=0)

# Fill with mean value

df = df.fillna(df.mean(), axis=0)

# Fill with maximum value

df = df.fillna(df.max(), axis=0)

您的下一步应该是对结果模型进行评分,并选择一个对看不见的数据概括得最好的模型。
在其他常见的插补技术中,可以用零填充空值( df.fillna(0) ),使用最频繁的值(检查simpleimputer)或使用更复杂的插补技术,例如最近邻。
最后,当您在看不见的数据上测试模型的性能时,您将发现输入null是否是正确的做法。
一般来说,您应该考虑删除丢失值超过20%的所有列。

相关问题