迭代数据帧只返回列标题

时间:2017-09-12 22:43:52

标签: python pandas matplotlib dataframe plot

我试图从包含地震数据的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])

对不起,如果以前回答过这个问题,我试着查一查,但我没有设法得到我在代码中找到的答案。

1 个答案:

答案 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