使用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数据框切片中的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 numpy 或 pandas 创建(或更改)数组/列表的维度?
Python 中的二阶导数 - scipy/numpy/pandas
python 将Numpy数组转换为Pandas Dataframe