如何将对象形式数组更改为普通数组

时间:2018-03-06 09:54:55

标签: python pandas numpy

这是一个.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

dataframepd.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]

任何帮助都应该得到赞赏。

1 个答案:

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

的详细信息,请参阅documentation

注意您可以将obs.REPORT_TIME转换为datetime

obs.REPORT_TIME = pd.to_datetime(obs.REPORT_TIME,format='%Y%m%d%H%M')