【问题标题】:How to handling NaN values while creating a geojson如何在创建 geojson 时处理 NaN 值
【发布时间】:2021-06-15 09:02:24
【问题描述】:

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

        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:,我不知道如何处理这个问题

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

【问题讨论】:

  • 您应该将 NaN 值替换为符合 JSON 的值(例如整数或字符串)。或者您可以删除 NaN 行。你想用空值做什么?
  • 放下它们就可以了
  • 嗯,你可以使用pandas函数dropna()(见pandas.pydata.org/pandas-docs/stable/reference/api/…
  • 谢谢!如果你像一个答案一样发布,我会验证它。

标签: python pandas geopandas geocode


【解决方案1】:

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

根据您要对 NaN 值执行的操作,您可以使用以下方法修复此错误:

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

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2020-11-19
    • 2020-09-25
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多