【问题标题】:How can I transform a 2d array to a pandas dataframe in python如何在 python 中将二维数组转换为 pandas 数据框
【发布时间】:2021-01-12 03:21:44
【问题描述】:

目前,我正在 kaggle 上做 Titanic 数据集。 Age 列有一些缺失值,我尝试使用 sklearn.impute SimpleImputer 估算它们。

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error as mae
from sklearn.model_selection import train_test_split as tts
from sklearn.impute import SimpleImputer

titanic_data = pd.read_csv("../input/titanic/train.csv")

imputer = SimpleImputer(missing_values=np.nan)


features = ['Age', 'Pclass']

X = titanic_data[features]
y = titanic_data.Survived

age_arr = X.Age.values.reshape(1, -1)

imputed_age = pd.DataFrame(imputer.fit_transform(age_arr))

X.Age = imputed_age

print(imputed_age)

如上所示,我在排列和转换这些数组和数据列时遇到了一些麻烦。我需要一种适当的方法来使它们成为年龄列中的单列。当我打印imputed_age 时,它给了我一个数据框,其中每个年龄都是一列。我想将所有这些都放在同一列中,我怎样才能轻松地进行插补并成功地将插补值再次放入数据框中?

如何将这些估算值放入数据框中?

【问题讨论】:

  • 你用reshape把数据变成1行n列,你可以再次reshape让它变成1列n行
  • 无论问题中的问题如何,将 imputed_age 添加到数据框中,此实现都不会填补缺失的年龄。注意,dataframe 中有 891 个值,但 imputed_age 只有 714 个值,这只是非空值的数量。有关填充 NaN 值的适当解决方案,请参阅副本。

标签: python pandas


【解决方案1】:

我在其他地方的论坛上问过这个问题,有人给了我一个解决方案。我放在这里,我稍微修改了一下。

import pandas as pd
import seaborn as sns
from sklearn.impute import SimpleImputer

df = sns.load_dataset("titanic")

features = ["pclass","age"]

X = df.loc[:,features]
y = df.survived

imputer = SimpleImputer()

age_transform = pd.DataFrame(imputer.fit_transform(pd.DataFrame(X.age)),columns=["Age"])

我检查了你的代码,我发现如果我们在 imputer.fit_transform 中输入数据帧,我们不需要重塑为 (1,-1)。 所以我只是将年龄列作为数据框并将其输入到 imputer 和 fit_transform 中。而且我认为它运作良好。

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多