这是一个.txt
数据文件,其中前两行是一些标题:
REC OBS REPORT TIME STATION LATI- LONGI- ELEV STN PR STN DSLP ALTIM AIR.T DEWPT R.HUM WIND WIND HOR 3H PR 24H PR |
TYPE TYPE YYYYMMDDHHMM BBSSS TUDE TUDE (M) (HP=MB) (HP=MB) (HP=MB) (C) (C) (%) DIR SPD(M/S) VIS(M) (KG/M2) (KG/M2) | PRES PMSL TMDB ALSE TMDP REHU WDIR WSPD TP03 TP24 HOVI
ADPSFC SYNOP 201209191754 72533 41.00 -85.20 252 990.3 1020.1 -9999.9 18.3 2.2 -9999.9 240.0 4.1 16000.0 -9999.9 -9999.9 | 99030.00 102010.00 291.45 -9999.90 275.35 -9999.90 240.00 4.10 -9999.90 -9999.90 16000.00
ADPSFC SYNOP 201209191754 72438 39.73 -86.27 246 991.7 1020.5 -9999.9 18.3 3.3 -9999.9 200.0 3.6 16000.0 -9999.9 -9999.9 | 99170.00 102050.00 291.45 -9999.90 276.45 -9999.90 200.00 3.60 -9999.90 -9999.90 16000.00
ADPSFC SYNOP 201209191756 72423 38.18 -85.73 149 1004.1 1021.5 -9999.9 19.4 1.1 -9999.9 0.0 0.0 16000.0 -9999.9 -9999.9 | 100410.00 102150.00 292.55 -9999.90 274.25 -9999.90 0.00 0.00 -9999.90 -9999.90 16000.00
ADPSFC SYNOP 201209192054 72533 41.00 -85.20 252 988.4 1017.9 -9999.9 19.4 2.8 -9999.9 200.0 6.2 16000.0 0.0 -9999.9 | 98840.00 101790.00 292.55 -9999.90 275.95 -9999.90 200.00 6.20 0.00 -9999.90 16000.00
ADPSFC SYNOP 201209192056 72423 38.18 -85.73 149 1001.8 1019.2 -9999.9 21.7 0.6 -9999.9 0.0 0.0 16000.0 0.0 -9999.9 | 100180.00 101920.00 294.85 -9999.90 273.75 -9999.90 0.00 0.00 0.00 -9999.90 16000.00
实际上,可以下载here
我使用obs
dataframe
,pd.read_table()
中阅读并存储这些数据
obs.values[1]
Out[4]: array([ ' ADPSFC SYNOP 201208312354 72533 41.00 -85.20 252 988.4 1017.6 -9999.9 27.2 22.8 -9999.9 200.0 2.1 16000.0 -9999.9 -9999.9 | 98840.00 101760.00 300.35 -9999.90 295.95 -9999.90 200.00 2.10 -9999.90 -9999.90 16000.00'], dtype=object)
但是,在数组中,它是string
应用splitlines()
,我们可以得到结果:
str(obs.values[1]).splitlines()
Out[5]: ["[ ' ADPSFC SYNOP 201208312354 72533 41.00 -85.20 252 988.4 1017.6 -9999.9 27.2 22.8 -9999.9 200.0 2.1 16000.0 -9999.9 -9999.9 | 98840.00 101760.00 300.35 -9999.90 295.95 -9999.90 200.00 2.10 -9999.90 -9999.90 16000.00']"]
但是我仍然很难使用数据(用于分析或绘图) 我的预期结果应该是一个数组,可以索引或切片。
[ADPSFC SYNOP 201209192056 72423 38.18 -85.73 149 1001.8 1019.2 -9999.9 21.7 0.6 -9999.9 0.0 0.0 16000.0 0.0 -9999.9 100180.00 101920.00 294.85 -9999.90 273.75 -9999.90 0.00 0.00 0.00 -9999.90 16000.00]
任何帮助都应该得到赞赏。
答案 0 :(得分:1)
也许您应该致电delim_whitespace=True
并手动重写columns
。
obs = pd.read_table('sample.tex', header=1,delim_whitespace=True).drop('|',axis=1)
obs.columns = ['REC_TYPE','OBS_TYPE','REPORT_TIME','STATION_BBSSS','LATITUDE','LONGITUDE','ELEV','STN_PR',
'STN_DSLP','ALTIM','AIR_T','DEWPT','R_HUM','WIND_DIR','WIND_SPD','HOR_VIS','3H_PR','24H_PR',
'PRES','PMSL','TMDB','ALSE','TMDP','REHU','WDIR','WSPD','TP03','TP24','HOVI']
print(obs.head())
REC_TYPE OBS_TYPE REPORT_TIME STATION_BBSSS LATITUDE LONGITUDE ELEV \
0 ADPSFC SYNOP 201209191754 72533 41.00 -85.20 252
1 ADPSFC SYNOP 201209191754 72438 39.73 -86.27 246
2 ADPSFC SYNOP 201209191756 72423 38.18 -85.73 149
3 ADPSFC SYNOP 201209192054 72533 41.00 -85.20 252
4 ADPSFC SYNOP 201209192056 72423 38.18 -85.73 149
你注意到了:
header=1
)'|'
)drop('|',axis=1)
然后,您的.tex
数据会存储到dataframe
中,以便于分析和绘图。
有关使用pandas
注意您可以将obs.REPORT_TIME
转换为datetime
:
obs.REPORT_TIME = pd.to_datetime(obs.REPORT_TIME,format='%Y%m%d%H%M')