我有一个名为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值?
答案 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