基于分隔符从抓取的网页中拆分数据帧列



我正在努力从公共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]

最新更新