我正在尝试将包含仅 .0 作为小数的浮点数的列转换为整数64。我在这个论坛上找到了一些旧的答案,但它们似乎不再起作用了。最终我使用了:
df_test["column_name"] = df_test['column_name'].apply(lambda x: np.int64(x))
Run Code Online (Sandbox Code Playgroud)
我想知道这是否是 pandas 的最佳实践以及与 to_numeric()相比如何
我正在城市地图上绘制某个分类值。我用来绘制的代码行如下:
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
urban_data.plot(column="category", cmap="viridis", ax=ax, categorical=True, /
k=4, legend=True, linewidth=0.5, /
legend_kwds={'fontsize':'19', 'loc':'lower left'})
Run Code Online (Sandbox Code Playgroud)
其中城市数据是 geopandas 数据框,我使用 matplotlib 作为绘图库。该参数legend_kwds允许我控制图例上的次要事物,例如位置或字体大小,但我无法决定主要事物,例如图例框中条目的顺序。事实上,我的类别是按 1-2-3-4 排列的,但我总是以不同的顺序显示它们。
是否可以对图例有更多的控制权?例如在函数外部gdf.plot()调用它?而且,如果是这样,我如何将图例中的颜色与地图中的颜色相匹配,这些颜色是 viridis 颜色图的离散值(我不确切知道)?
编辑:这是一个可验证的示例。不幸的是,shapefiles需要其他文件才能工作,这里geometry需要一个(区域,而不是点)列,所以我不得不要求你下载这个美国的shpfile 。您需要的一切都在这个文件夹中。这是重现该问题的代码。输出中的绘图很糟糕,因为我不关心这里的坐标系,但重要的是图例。
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
gdf=gpd.read_file('.../USA_adm1.shp')
clusters=np.random.randint(0,4, size=52)
gdf['cluster']=clusters
clusdict={1: 'lower-middle', 2: 'upper-middle', 3: 'upper', 0: 'lower'}
gdf['cluster']=gdf['cluster'].map(clusdict)
fig = plt.figure(figsize=(12, 12))
ax = plt.gca()
gdf.plot(column='cluster',cmap='viridis', categorical=True, legend=True, ax=ax)
Run Code Online (Sandbox Code Playgroud) 我对 python 比较陌生,并尝试使用 pip 在 python 3.7 上安装 geopandas。出于不同的原因,我想避免使用 anaconda 发行版。在这篇文章之后,我能够通过首先手动安装依赖项来成功安装 geopandas。问题是现在我在尝试导入 geopandas 时遇到了一个问题:
import geopandas
Run Code Online (Sandbox Code Playgroud)
随后的错误消息是:
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\site-packages\geopandas\__init__.py", line 5, in <module>
from geopandas.io.file import read_file
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\site-packages\geopandas\io\file.py", line 4, in <module>
import fiona
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\site-packages\fiona\__init__.py", line 87, in <module>
from fiona.collection import BytesCollection, Collection
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\lib\site-packages\fiona\collection.py", line 9, in <module>
from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激
我有以下地理数据框,对应于常规网格:
id grid_id geometry
0 48 0 (POLYGON ((2.052457758079306 41.42493869117656...
1 49 1 (POLYGON ((2.052470852112577 41.42403805731954...
2 215 2 (POLYGON ((2.053641274433816 41.42584917461342...
3 216 3 (POLYGON ((2.053654352531821 41.42494854059127...
4 217 4 (POLYGON ((2.053667430035439 41.42404790642426...
Run Code Online (Sandbox Code Playgroud)
和一个点地理数据框:
id_act geometry
0 4001 POINT (2.183026563657264 41.37459702541483)
1 4003 POINT (2.183012216695291 41.37471411724238)
2 4003 POINT (2.183128113845906 41.37472901746361)
3 3002 POINT (2.182820482338962 41.37482095671629)
4 4003 POINT (2.182945418252172 41.37482221760939)
Run Code Online (Sandbox Code Playgroud)
我正在通过空间连接合并两个数据框:
id_grid = gpd.sjoin(gdf, grid, how="inner", op='intersects')
Run Code Online (Sandbox Code Playgroud)
但它返回以下内容AttributeError:
AttributeError: 'NoneType' object has no attribute 'bounds'
Run Code Online (Sandbox Code Playgroud)
关键是当我调用函数时: …
我geopandas使用 OpenStreetMap 中的形状文件创建了一个简单的地图(链接)。
import geopandas as gpd
map_gdf = gpd.read_file('path_to_shapefile')
map_gdf.plot()
Out:
Run Code Online (Sandbox Code Playgroud)
如何将绘图限制在图像的特定部分,基本上是放大特定位置。我可以通过指定我想在纬度和经度中绘制的地图部分的范围来做到这一点吗?
我搜索了我的问题,发现这个问题与我的问题不同。
我有两个地理数据框,一个包含房屋位置points(~700 点),另一个包含suburbs names它们的位置polygon(~2973 个多边形)。我想将每个点链接到一个多边形,以将每个房屋分配给正确的郊区。
我的地理数据框示例
import geopandas as gpd
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
#creating geo series
polys = gpd.GeoSeries({
'6672': Polygon([(142.92288, -37.97886,), (141.74552, -35.07202), (141.74748, -35.06367)]),
'6372': Polygon([(148.66850, -37.40622), (148.66883, -37.40609), (148.66920, -37.40605)]),
})
#creating geo dataframe
polysgdf = gpd.GeoDataFrame(geometry=gpd.GeoSeries(polys))
polysgdf
Run Code Online (Sandbox Code Playgroud)
产生以下结果(我的原始地理数据框还包括一个suburb包含郊区名称的列,但我无法将其添加到我的样本中,您只能看到下面的郊区 ID)
geometry
6672 POLYGON ((142.92288 -37.97886, 141.74552 -35.07202, 141.74748 -35.06367, 142.92288 -37.97886))
6372 POLYGON ((148.66850 -37.40622, 148.66883 -37.40609, 148.66920 -37.40605, 148.66850 -37.40622)) …Run Code Online (Sandbox Code Playgroud) 只要我不尝试更改其图例的位置,我的情节就可以正常工作。(我正在绘制一个 GeoDataFrame。)
# %%
ax = NE_shp.plot(column=NE_shp.iloc[:,4], figsize=(10,3), scheme='quantiles', edgecolor='k', k=10, legend=True)
#ax.legend(loc='upper left', bbox_to_anchor=(1, 1)) #This is the line for relocating legend
ax.set_title('The Map', fontsize=16)
ax.axis('off')
Run Code Online (Sandbox Code Playgroud)
但是当我使用现在被屏蔽的行作为注释来更改图例位置时,会出现以下错误并且图例未显示如下图
No handles with labels found to put in legend.
(我怀疑它是否与scheme='quantiles'原因有关,它不是 matplotlib 固有的,而是由 pySAL 添加的。)
非常感谢您的建议。
我有一个美国所有州的基本形状文件,可以在这里找到。
我正在寻找编辑夏威夷和阿拉斯加这两个州的位置,我希望更改夏威夷州的坐标,使其大致位于内华达州之下,并且我还希望更改阿拉斯加州的位置相当小......而且它大致位于加利福尼亚州和亚利桑那州的下方,我包括一张图片,只是为了让我的想法有一个视觉效果......

正如你所看到的,阿拉斯加和夏威夷位于美国大陆的左下方,就在前面提到的州之下。
我知道要发生这种情况,我需要使用 geopandas 等更改两个州的经度和纬度坐标。
所以我从夏威夷州开始,并开始使用 numpy 访问多边形坐标。这是到目前为止的代码片段
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
from shapely.geometry import Polygon
from shapely.geometry import Point, Polygon
import numpy as np
poly_States = gpd.read_file("states.shp")
hawaii = poly_States[poly_States.STATE_ABBR == "HI"]
coords = [i for i in hawaii.geometry]
all_Coords = []
for b in coords[0].boundary:
coords = np.dstack(b.coords.xy).tolist()
all_Coords.append(*coords)
for cord_1 in all_Coords:
for cord2 in cord_1:
cord2[0] = cord2[0] + 54.00000000000000
Run Code Online (Sandbox Code Playgroud)
我的想法是访问数组格式的坐标并通过添加 54 …
运行命令dataframe['geometry'].centroid显示警告:

列“几何”由多多边形对象组成。如何解决此问题以准确计算多多边形形状的质心?
我有一个点列表(经度和纬度),以及它们在地理数据框中的关联点几何。所有的点都应该能够细分为单独的多边形,因为这些点通常聚集在几个区域中。我想做的是有某种算法来遍历点并检查前一个点和当前点之间的距离。如果距离足够小,它会将这些点组合在一起。这个过程会一直持续到当前点离得太远。它会从这些接近的点中创建一个多边形,然后用下一组点继续这个过程。
gdf
longitude latitude geometry
0 -76.575249 21.157229 POINT (-76.57525 21.15723)
1 -76.575035 21.157453 POINT (-76.57503 21.15745)
2 -76.575255 21.157678 POINT (-76.57526 21.15768)
3 -76.575470 21.157454 POINT (-76.57547 21.15745)
5 -112.973177 31.317333 POINT (-112.97318 31.31733)
... ... ... ...
2222 -113.492501 47.645914 POINT (-113.49250 47.64591)
2223 -113.492996 47.643609 POINT (-113.49300 47.64361)
2225 -113.492379 47.643557 POINT (-113.49238 47.64356)
2227 -113.487443 47.643142 POINT (-113.48744 47.64314)
2230 -105.022627 48.585669 POINT (-105.02263 48.58567)
Run Code Online (Sandbox Code Playgroud)
所以在上面的数据中,前 4 个点将组合在一起并变成一个多边形。然后,它将移动到下一组,依此类推。每组点不是均匀分布的,即下一组可能是 7 对点,接下来可能是 3 对。理想情况下,最终输出将是另一个地理数据框,它只是一堆多边形。
geopandas ×10
python ×7
pandas ×3
legend ×2
matplotlib ×2
python-3.x ×2
bounds ×1
choropleth ×1
geometry ×1
numpy ×1
pip ×1
python-3.5 ×1
shapefile ×1
shapely ×1
windows ×1