![](/img/trans.png)
[英]Python: Updating a single value in a Pandas Dataframe using loc[]+iloc[]+loc[]
[英]Pandas: Set a value on a data-frame using loc then iloc
假设我有以下数据框:
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
进行切片,然后分配给该切片。 这应该可以解决您遇到的“分配副本”问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.