假设我具有以下数据框:
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
对我来说,按照我尝试的模式完成此操作非常重要。原因是:
总而言之,我的问题是我如何才能从开始的数据帧转到最终的数据帧,同时又有一个遵循我尝试的方法的解决方案。
答案 0 :(得分:2)
这是您处理问题中显示的特定示例的方式:
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
,然后分配到那片。这样就可以解决您遇到的“分配副本”问题。