Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Pandas 将一个数据帧中的多个列值替换为受公共键列约束的另一个数据帧的值_Pandas_Geopandas - Fatal编程技术网

Pandas 将一个数据帧中的多个列值替换为受公共键列约束的另一个数据帧的值

Pandas 将一个数据帧中的多个列值替换为受公共键列约束的另一个数据帧的值,pandas,geopandas,Pandas,Geopandas,我想从另一个GeoPanda数据框中更新选定列的GeoPanda数据框中的值。它们都有一个称为“几何体”的公用键 比如说 df1 = pd.DataFrame([["X",1,1,0], ["Y",0,1,0], ["Z",0,0,0], ["Y",0,0,0]],columns=["geometry","Nonprofit","Business", "Education"]) df2 = pd.Dat

我想从另一个GeoPanda数据框中更新选定列的GeoPanda数据框中的值。它们都有一个称为“几何体”的公用键

比如说

df1 = pd.DataFrame([["X",1,1,0],
              ["Y",0,1,0],
              ["Z",0,0,0],
              ["Y",0,0,0]],columns=["geometry","Nonprofit","Business", "Education"])    

df2 = pd.DataFrame([["Y",1,1],
              ["Z",1,1]],columns=["geometry","Non", "Edu"])  
在此之后,我执行了以下步骤:

df1 = df1.set_index('geometry')
df2 = df2.set_index('geometry')

list_1 = ['Nonprofit', 'Education']
list_2 = ['Non', 'Edu']

df1[list_1].update(df2[list_2])
这会在没有任何警告的情况下导致错误的结果。我怎样才能解决这个问题

注:

一次更新一列df1['Non']。updatedf2['Non']将生成正确的结果

为简单起见,Geopanda中的几何体线条字符串被替换为字符。

仅更新具有相同名称的列

因此,一种解决方案是首先重命名df2中的列以匹配df1中的列

注意,在调用update时,不需要在df1中指定目标列:所有公共列都将被更新。如果需要,可以使用列索引指定希望从df2中获得哪些列

df2=df2.renamecolumns={'Non':'Non':'Non','Edu':'Education'} df1.updatedf2 (可选)限制列: df1.updatedf2[“非营利组织”] 替代短版本,保持df2不变 df1.updatedf2.renamecolumns={'Non':'Non':'Non','Edu':'Education'} 给予

          Nonprofit  Business  Education
geometry                                
X               1.0         1        0.0
Y               1.0         1        1.0
Z               1.0         0        1.0
Y               1.0         0        1.0
单列方法之所以有效,是因为您隐式地使用了它,其中没有公共列这样的概念。

只更新具有相同名称的列

因此,一种解决方案是首先重命名df2中的列以匹配df1中的列

注意,在调用update时,不需要在df1中指定目标列:所有公共列都将被更新。如果需要,可以使用列索引指定希望从df2中获得哪些列

df2=df2.renamecolumns={'Non':'Non':'Non','Edu':'Education'} df1.updatedf2 (可选)限制列: df1.updatedf2[“非营利组织”] 替代短版本,保持df2不变 df1.updatedf2.renamecolumns={'Non':'Non':'Non','Edu':'Education'} 给予

          Nonprofit  Business  Education
geometry                                
X               1.0         1        0.0
Y               1.0         1        1.0
Z               1.0         0        1.0
Y               1.0         0        1.0

单列方法之所以有效,是因为您隐式使用了它,而没有公共列这样的概念。

检查您的pandas版本我正在使用pandas版本“1.0.3”。谢谢,这是因为您没有使用当前版本的熊猫。链接中的答案是,使用当前版本的pandas时会出现警告。我认为问题与列表中传递的多个列标签有关。当我使用df1['Non'].updatedf2['Non']时,我得到了正确的答案。当我传递df1[list_1].updatedf2[list_2]中列名的列表时,我遇到问题。谢谢你的熊猫版本我正在使用熊猫版本“1.0.3”。谢谢,这是因为您没有使用当前版本的熊猫。链接中的答案是,使用当前版本的pandas时会出现警告。我认为问题与列表中传递的多个列标签有关。当我使用df1['Non'].updatedf2['Non']时,我得到了正确的答案。当我传递df1[list_1].updatedf2[list_2]中列名的列表时,我遇到问题。谢谢