在处理None的行时,在pandas列中提取JSON以分隔各列

时间:2018-07-20 06:54:19

标签: python json python-3.x pandas dataframe

我有一个名为df的熊猫数据帧,其中包含通过获取twitter json并将其加载到数据帧中而创建的twitter tweets。我正在尝试提取有趣的信息。坐标列大多为“无”,但有时它包含以下格式的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列中的信息提取到单独的pandas列中,同时优雅地处理其他行中的None值?

1 个答案:

答案 0 :(得分:1)

如果您的'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