使用numpy数组更改python pandas数据框切片中的元素[重复]

Posted

技术标签:

【中文标题】使用numpy数组更改python pandas数据框切片中的元素[重复]【英文标题】:Change elements in a python pandas dataframe slice with a numpy array [duplicate] 【发布时间】: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 【参考方案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

以上是关于使用numpy数组更改python pandas数据框切片中的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python数据分析模块:numpy、pandas全解

如何使用 numpy 或 pandas 创建(或更改)数组/列表的维度?

Python 中的二阶导数 - scipy/numpy/pandas

python 将Numpy数组转换为Pandas Dataframe

python - 如何将 numpy 数组附加到 pandas 数据帧

Python:使用pandas和numpy计算标准差的区别