我正在努力从公共API获取数据,并将其转换为Pandas数据帧,基本上来自美国地震网站。我得到了JSON表单数据,它实际上是嵌套字典的列表。我使用一种方法并将其转换为数据帧,其形式为"pandas.core.frame.DataFrame"。现在,当我尝试拆分坐标列时,我遇到了 NaN 或其他问题。该系列的形式类为"pandas.core.series.Series"。
这是我的代码-
import urllib.request, json
import pandas as pd
url = "https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2016-10-01&endtime=2016-10-02"
response = urllib.request.urlopen(url)
data = json.loads(response.read())
y=data['features']
o=[]
for d in y:
d.update(d.pop('geometry', {}))
for i in y:
i.update(i.pop('properties', {}))
#print(y)
df1=pd.DataFrame(y)
print(type(df1))
df1=df1.drop(['alert','cdi','detail','felt','id','ids','mmi','net','sources','updated','url'],axis=1)
print(type(df1['coordinates']))
display(df1)
我尝试使用str.split,Pandas.Series.str.split,slitt
coordinates
列表中有 3 个值,而不是字符串。
您可以将apply()
与lambda
一起使用,从每个列表中获取一个值 - 然后您可以使用这些值创建列
df1['x'] = df1['coordinates'].apply(lambda x: x[0])
df1['y'] = df1['coordinates'].apply(lambda x: x[1])
df1['z'] = df1['coordinates'].apply(lambda x: x[2])
print(df1[['x', 'y', 'z', 'coordinates']].head())
您还可以将所有值转换为 3 个系列并转换为 3 个新列
df1[['x', 'y', 'z']] = df1['coordinates'].apply(pd.Series)
print(df1[['x', 'y', 'z', 'coordinates']].head())
在这两个地区都是
x y z coordinates
0 -118.895700 38.860700 5.30 [-118.8957, 38.8607, 5.3]
1 -124.254833 40.676333 27.40 [-124.2548333, 40.6763333, 27.4]
2 -116.020000 31.622500 10.19 [-116.02, 31.6225, 10.19]
3 -121.328167 36.698667 4.31 [-121.3281667, 36.6986667, 4.31]
4 -115.614500 33.140500 5.02 [-115.6145, 33.1405, 5.02]