Python 熊猫:使用loc然后iloc在数据帧上设置一个值
假设我有以下数据帧:Python 熊猫:使用loc然后iloc在数据帧上设置一个值,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有以下数据帧: df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"]) feature_a feature_b feature_c feature_d e 0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0
df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"])
feature_a feature_b feature_c feature_d e
0 0.0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0 0.0
但是,请注意,我正在处理的数据帧要大得多。然后,我想做的是更新中间两个要素列的值,这样结果将是:
feature_a feature_b feature_c feature_d e
0 0.0 0.0 0.0 0.0 0.0
1 0.0 8.0 8.0 0.0 0.0
2 0.0 0.0 0.0 0.0 0.0
我所尝试的,我认为它会起作用:
feature_columns = df.filter(like="feature").columns.values
df.loc[:,feature_columns].iloc[1,[1, 2]] = 88
对我来说,这是非常重要的,这是按照我尝试过的模式进行的。原因是:
总而言之,我的问题是如何从开始的数据帧转到最终的数据帧,同时按照我尝试过的方法找到解决方案。以下是您如何处理问题中显示的具体示例:
import pandas as pd
df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"])
feature_columns = df.filter(like="feature").columns.values
sli = df[feature_columns].iloc[1,[1,2]]
df.loc[sli.name, sli.index] = 88
print(df)
# output
# feature_a feature_b feature_c feature_d e
# 0 0.0 0.0 0.0 0.0 0.0
# 1 0.0 88.0 88.0 0.0 0.0
# 2 0.0 0.0 0.0 0.0 0.0
根据具体的应用程序,您可能需要更改一点左右的确切语法,但这个想法是广泛适用的:获取您选择的列和索引,然后使用它们来切片
df.loc
,然后分配给该切片。这应该可以解决您遇到的“分配给复制”问题。以下是您如何处理问题中显示的具体示例:
import pandas as pd
df = pd.DataFrame(np.zeros((3, 5)), columns=["feature_a", "feature_b", "feature_c", "feature_d", "e"])
feature_columns = df.filter(like="feature").columns.values
sli = df[feature_columns].iloc[1,[1,2]]
df.loc[sli.name, sli.index] = 88
print(df)
# output
# feature_a feature_b feature_c feature_d e
# 0 0.0 0.0 0.0 0.0 0.0
# 1 0.0 88.0 88.0 0.0 0.0
# 2 0.0 0.0 0.0 0.0 0.0
根据具体的应用程序,您可能需要更改一点左右的确切语法,但这个想法是广泛适用的:获取您选择的列和索引,然后使用它们来切片
df.loc
,然后分配给该切片。这应该可以解决您遇到的“分配给复制”问题。您的问题是什么?我进行了编辑。您的问题是什么?我进行了编辑。