如何在创建 geojson 时处理 NaN 值

问题描述

我正在尝试从 .geojson 创建一个 DataFrame 文件我有这张桌子:

        long       lat  elev
0  40.392987 -3.652552   0.0
1  41.471062  2.041841   0.0
2  41.410016  2.175180   0.0
3        NaN       NaN   NaN

这是创建.geojson文件函数

    def data2geojson(df):
        features = []
        df.apply(lambda X: features.append(
            geojson.Feature(geometry=geojson.Point((X["lat"],X["long"],X["elev"])),properties={"country": "Spain"})),axis=1)
        with open('map.geojson','w') as fp:
            geojson.dump(geojson.FeatureCollection(features),fp,sort_keys=True)

如果我只选择前三列但抛出下一个错误,则此代码有效: Out of range float values are not JSON compliant: nan

除了使用 try:except ValueError:

我不知道如何处理这个问题

但是抛出异常会破坏函数并且如果有更多值就无法继续......我该如何处理??

解决方法

这个错误是因为 JSON 不接受 NaN 值(顺便说一下,这在 Python 中被认为是 float)。在将其转换为 geojson 之前,您需要在输入数据框中编辑这些值。

根据您想对 NaN 值做什么,您可以使用以下方法修复此错误:

  • 您可以按照以下说明将它们全部删除。只要行的值中至少有一个为 NaN,这将删除该行:
df = df.dropna()
  • 您可以用任何值替换它们。以下将任何 NaN 替换为 0
df = df.fillna(value=0)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...