繁体   English   中英

熊猫:使用loc然后使用iloc在数据帧​​上设置值

[英]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

对我来说,完全按照我尝试过的模式进行操作非常重要。 原因是:

  1. 我希望更新的列严格包含一个模式。
  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进行切片,然后分配给该切片。 这应该可以解决您遇到的“分配副本”问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM