我有一堆代表自行车骑行活动的json文件(来自Strava网站API)。
当我用pandas.io.json.read_json(filenme)
打开文件时,我得到了这个结果
"Printing DataFrame:"
Data columns (total 11 columns):
altitude 33286 non-null values
distance 33286 non-null values
grade_smooth 33286 non-null values
latlng 33286 non-null values
moving 33286 non-null values
outlier 33286 non-null values
resting 33286 non-null values
time 33286 non-null values
total_elevation 33286 non-null values
velocity_smooth 33286 non-null values
watts_calc 33286 non-null values
dtypes: bool(3), float64(5), int64(2), object(1)
"printing single row (df.ix[0]):"
altitude 699.2
distance 0
grade_smooth 9
latlng [-28.234746, -52.380721]
moving False
outlier False
resting False
time 0
total_elevation 0
velocity_smooth 0
watts_calc 0
Name: 0, dtype: object
但是,我想进行两项重要修改以增强我的工作流程:
object
列中拆分latlng(目前读作float64
类型); datetime64
数据类型,并使其成为索引。在另一个脚本中,我使用[start_time + datetime.timedelta(seconds = t) for t in json_activity['time']]
; 我看了一下这些文档,但它们和我上一次尝试使用熊猫一年前一样令人困惑......
编辑:我有以下代码可以提供我想要的内容,但对我来说有点恶意:
activity = json.load(open(fname))
datetimestring = fname.split(' - ')[0] # start time is taken from filename
start = datetime.datetime.strptime(datetimestring, '%Y-%m-%d-%H-%M-%S')
time = numpy.array([start + datetime.timedelta(seconds = t) for t in activity['time']])
lat,lon = numpy.hsplit(numpy.array(activity['latlng'], dtype=float), 2)
dist = numpy.array(activity['distance'], dtype=float)/1000.0
speed = numpy.array(activity['velocity_smooth'], dtype=float)
df = pandas.DataFrame({'dist': dist,
'lat': lat.ravel(),
'lon': lon.ravel()},
index=time)
df.sort_index(inplace=True)