【问题标题】:Change elements in a python pandas dataframe slice with a numpy array [duplicate]使用numpy数组更改python pandas数据框切片中的元素[重复]
【发布时间】:2020-10-04 18:28:54
【问题描述】:

想知道是否有人可以帮助我解决这个问题。我正在研究一个机器学习问题,我已将df1[Age] 列分类为df1[Age_group]。不幸的是,缺少数据,因此任何df[Age]NaN 都被归类为3

目前3 的分类仅表示“缺少数据”,我想将其更新为有用的东西。我已经使用 scikit-learn 逻辑回归来猜测缺失的年龄组,它们现在存储在一个我称之为 missing_age_grps 的 Numpy 数组中。

显然我正在使用的数据集要大得多,但下面应该有足够的数据来说明问题。

在下面的示例中,missing_age_grps 是一个只有 2 个的数组,因为只有 2 个 df1[Age_group] == 3 实例

import pandas as pd
import numpy as np

d = {'ID': [0, 1, 2, 3, 4], 'Sex': ["Male","Female","Male","Male", "Female"], 'Age':[np.nan, 23, np.nan, 6, 15] , 'Age_group':[3,2,3,0,1]}
df1 = pd.Dataframe(d)

print(df1)

ID   Sex         Age  Age_group
0    Male        NaN      3   
1    Female      23       2   
2    Male        NaN      3
3    Male        6        0
4    Female      15       1 /....

print(missing_age_grps)

[0, 1]

我无法仅重写df1['Age_group'] 中由3 表示的值。

理想的解决方案将仅使用 numpy 数组中的值更新 3。这是预期的输出:

print(df1)

ID   Sex         Age  Age_group
0    Male        NaN      0   
1    Female      23       2   
2    Male        NaN      1
3    Male        6        0
4    Female      15       1 /....

【问题讨论】:

  • df1.loc[df1['Age'].isna(), 'Age_group'] = age_group

标签: python pandas


【解决方案1】:

因为我没有看到任何numpy.array,所以我将为这些值创建一个值并替换它。

import pandas as pd
import numpy as np

d = {'ID': [0, 1, 2, 3, 4], 'Sex': ["Male","Female","Male","Male", "Female"], 'Age':[np.nan, 23, np.nan, 6, 15] , 'Age_group':[3,2,3,0,1]}
df1 = pd.DataFrame(d)
replacement_array = np.array([22, 23])
df1.loc[df1['Age_group'] ==3, 'Age_group'] = replacement_array
print(df1)

逻辑只是用你的替换值替换你的subset of values df1['Age_group'] == 3

【讨论】:

  • 对不起,如果这在问题中并不明显,但替换值并不总是 2。它可能是 0、1 或 2。我将更新问题以反映这一点......
  • 所以使用replacement_value = [0,1]
  • 我根据您的要求调整了答案@hamslice
  • 实际上我无法将列表传递给此,我收到以下错误ValueError: Must have equal len keys and value when setting with an iterable
  • 检查更新的代码,可能你正在这样做df1.loc[df1['Age_group'] ==3, :] = replacement_array而不是df1.loc[df1['Age_group'] ==3, "Age_group"] = replacement_array
猜你喜欢
  • 2017-06-24
  • 2020-05-26
  • 2019-09-20
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
相关资源
最近更新 更多