代码之家  ›  专栏  ›  技术社区  ›  Superdooperhero

在处理不包含任何行的行时,将panda列中的json提取为单独的列

  •  1
  • Superdooperhero  · 技术社区  · 6 年前

    我有一个名为df的pandas数据框,其中包含通过将twitter json加载到数据框中而创建的twitter tweet。我正在尝试提取有趣的信息。坐标列主要是无的,但有时它包含以下格式的geojson:

    {'coordinates': [21.425775, 8.906141], 'type': 'Point'}
    

    这里21.425775表示经度,8.906141表示纬度。我想将纬度和经度提取成单独的列。不幸的是,我的熊猫技能更接近初级水平,所以我不知道如何查找和替换;而且似乎还有更好的方法,如 this 我不完全理解的问题。

    数据帧的一个例子是:

      coordinates
    0 None
    1 {'coordinates': [21.425775, 8.906141], 'type': 'Point'}
    

    如何将嵌套JSON列中的信息提取到单独的PANDA列中,同时优雅地处理其他行中的NONE值?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rakesh    6 年前

    如果你的 'coordinates' 是一个列表,然后您可以使用 tolist() 具有 pd.DataFrame

    前任:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'coordinates': [{'coordinates': [21.425775, 8.906141], 'type': 'Point'}, None]})
    df['temp'] = df['coordinates'].apply(lambda x: x.get("coordinates") if x else [np.nan, np.nan]).dropna()
    df[['longitude','latitude']] = pd.DataFrame(df.temp.values.tolist(), index= df.index)
    df.drop('temp', axis=1, inplace=True)
    print(df)
    

    输出:

                                             coordinates  longitude  latitude
    0  {u'type': u'Point', u'coordinates': [21.425775...  21.425775  8.906141
    1                                               None        NaN       NaN