基于delimi从废弃网页中拆分数据帧列

2024-04-18 15:56:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从一个公共API获取数据,并将其转换成一个基本上来自美国地震网站的熊猫数据框架。我得到了JSON表单数据,实际上是嵌套字典的列表。我使用了一种方法,并将其转换为dataframe,它的格式为class'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


Tags: 数据coreimportjsonurldataframepandasdata
1条回答
网友
1楼 · 发布于 2024-04-18 15:56:04

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]

相关问题 更多 >