我试图从包含地震数据的csv中提取纬度,经度,幅度和时间,以便将它们绘制成地图。
我目前提取数据的代码是:
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
但我的输出是:
import pandas as pd
csv_path = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_hour.csv'
filename = pd.read_csv(csv_path, names = ['time','latitude','longitude','mag'])
lats, lons = [], []
magnitudes = []
timestrings = []
for row in filename:
print (row)
lats.append(row[1])
lons.append(row[2])
magnitudes.append(row[2])
timestrings.append(row[0])
# Printing this to check if the values are correctly imported
# This is, instead, printing the second letter of each word
print('lats', lats[0:5])
print('lons', lons[0:5])
对不起,如果以前回答过这个问题,我试着查一查,但我没有设法得到我在代码中找到的答案。
答案 0 :(得分:4)
您有一个pandas数据帧,而不是文件。对数据帧进行迭代可以为您提供系列的标题:
>>> import pandas as pd
>>> filename = pd.read_csv('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_hour.csv', names = ['time','latitude','longitude','mag'])
>>> list(filename)
['time', 'latitude', 'longitude', 'mag']
这些名称是您传递给read_csv
电话的名称,但它们不是过滤器。我不会在这里使用names
,让Pandas找出哪些列,然后选择那些:
>>> df = pd.read_csv('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_hour.csv')
>>> df.time
0 2017-09-12T22:13:27.650Z
Name: time, dtype: object
>>> df.latitude
0 58.0241
Name: latitude, dtype: float64
>>> df.longitude
0 -32.3543
Name: longitude, dtype: float64
>>> df.mag
0 4.8
Name: mag, dtype: float64
我使用了更常见的df
名称来反映这是一个数据框。
只有一行,因此您可以通过将每个系列转换为列表来获取数据,从而生成单个值:
df = pd.read_csv('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_hour.csv')
time = df.time.tolist()
lats = df.latitude.tolist()
longs = df.longitude.tolist()
magnitudes = df.mag.tolist()
但是,如果您想绘制数据,您可以直接从数据框中进行绘制,而无需手动提取列表。请参阅Pandas Visualisation。