obspy绘制beach ball

import numpy as np

​import matplotlib.pyplot as plt 

 from mpl_toolkits.basemap import Basemap 

 from obspy import read_events 

from obspy.imaging.beachball import beach 

 event = read_events( 'https://earthquake.usgs.gov/archive/product/moment-tensor/' 'us_20005ysu_mww/us/1470868224040/quakeml.xml', format='QUAKEML')[0] 

origin = event.preferred_origin() or event.origins[0] 

ocmec = event.preferred_focal_mechanism() or event.focal_mechanisms[0] 

tensor = focmec.moment_tensor.tensor 

pandas日期及添加列

已经有了pandas数据框格式的地震目录,需要获取日期的datetime数值,并存储到新的一列dt中,可以这么操作
cata['dt']=cata.apply(lambda x: datetime(x['yr'],x['mn'],x['dy']),axis=1)
这个是按行操作的,很慢。
或者用pandas的to_datetime方法:
pd.to_datetime(df['year'].astype(str) + '-'+ df['month'].astype(str)+ '-1')

而批量操作不行,比如
datetime(x['yr'],x['mn'],x['dy'])
因为datetime不支持pandas的批量操作。

pandas生成日期序列

pandas的date_range函数可以方便的生成日期序列

from datetime import datetime​

import pandas as pd

t_series=pd.date_range(start=datetime(2000,1,1),end=datetime(2000,12,31),freq='D')

这里生成从start到end按天的日期序列,如果freq是M,则是每个自然月的月底​

需要注意的是,现在的t_series并不是datetime类型的序列,而是​timestamp类型的,因此在使用的时候还要注意转换,采用map和匿名函数可以进行方便的转换

t_series_new=t_series.map(lambda t:t.date())​

此时的t_series_new就是date类型的了,还需要注意datetime和date类型是不可以进行比较的,要转成一致才可以。​