gpt4 book ai didi

python-3.x - 有没有办法使用单值 geoseries 向 geopandas 数据框添加一列?

转载 作者:行者123 更新时间:2023-12-04 01:43:33 25 4
gpt4 key购买 nike

我正在尝试将一列添加到 Geopandas (0.4.0) 中的地理数据框,其中包含来自地理系列的单个值(点)以用于进一步计算。

但是,在简单地创建一个新列并直接分配 geoseries 之后,我注意到新列填充了 NaN。

如果我使用匀称的对象本身,我会收到以下错误消息:
“断言错误:新值的形状必须与管理器形状兼容”

下面的例子:

import pandas as pd
import numpy as np
import geopandas as gpd
from shapely.geometry import Point

# create some geometry
coordinates = {'lng': [1,2,3], 'lat': [4,5,6], 'loc': ['a', 'b', 'd']}
df = pd.DataFrame(coordinates, columns = ['loc', 'lat', 'lng'])


df['geometry'] = df.apply(
lambda x: Point((x.lat, x.lng)),
axis = 1)

# create point of interest
coordinates_center = {'lng': 2.2, 'lat': 4.8, 'loc': ['c']}
df_center = pd.DataFrame(coordinates_center)

df_center['geometry'] = df.apply(
lambda x: Point((x.lat, x.lng)),
axis = 1)

# check data type
print (type(df_center))
center = df_center['geometry']
print (type(center))
center_point = center[0]
print (type(center_point))

#create new column in main dataframe and assign the point of interest
df.assign(center=center_point)

最佳答案

(geo)pandas 的神奇之处在于它会自动对齐索引上的数据。因此,它将您的单值系列与数据框的索引对齐。最多只能进行一场比赛。如果要为新列分配一个常量值,请使用标量。

举个例子(而不是我提供的可重现的例子):

import pandas

df = pandas.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]}, index=list('abc'))
s = pandas.Series([6], index=[0])

print(df.assign(C=s))


我们得到:
   A  B   C
a 0 3 NaN
b 1 4 NaN
c 2 5 NaN

这是因为索引 s和索引 df没有比赛。如果有一个匹配(自 len(s) == 1 ),你会得到:

s = pandas.Series([6], index=['b'])

print(df.assign(C=s))
   A  B   C
a 0 3 NaN
b 1 4 6.0
c 2 5 NaN

但这不是您想要的,因此您应该只使用标量:

print(df.assign(C=6))
   A  B  C
a 0 3 6
b 1 4 6
c 2 5 6

关于python-3.x - 有没有办法使用单值 geoseries 向 geopandas 数据框添加一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com