Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:使用loc然后iloc在数据帧上设置一个值_Python_Pandas_Dataframe - Fatal编程技术网

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
    ,然后分配给该切片。这应该可以解决您遇到的“分配给复制”问题。

    您的问题是什么?我进行了编辑。您的问题是什么?我进行了编辑。