爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfoLab脚本示例:读取文本文件绘制散点图

[复制链接]

新浪微博达人勋

发表于 2017-11-6 16:18:45 | 显示全部楼层
王老师您好,我想请教一下,如果文件第一行和第一列都是字符串类型应该怎么读取呢? 文件格式如下
sta         lat       lon        mean_pm25
beijing   39.8    116.47   140.179
tianjin   39.1    117.17   139.989
baoding   38.85    115.57   209.216
shijiazhuang   38.03    114.42   233.57
xingtai   37.07    114.5   197.461
handan   36.6    114.5   224.685
hengshui   37.73    115.7   163.941
cangzhou   38.33    116.83   140.018
tangshan   39.67    118.15   144.438
qinhuangdao   39.93    119.6   85.1615
chengde   40.97    117.93   55.1026
zhangjiakou   40.78    114.88   41.9897
taiyuan   37.78    112.55   136.522
datong   40.11    113.38   71.4905
jinan   36.68    116.98   150.435
zhengzhou   34.72    113.65   173.532
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-11-6 16:23:22 | 显示全部楼层
bearwoo 发表于 2017-11-6 16:18
王老师您好,我想请教一下,如果文件第一行和第一列都是字符串类型应该怎么读取呢? 文件格式如下
sta     ...

可以用 readtable 函数来读取数据,参考此贴:http://bbs.06climate.com/forum.php?mod=viewthread&tid=45037
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-6 16:38:05 | 显示全部楼层
MeteoInfo 发表于 2017-11-6 16:23
可以用 readtable 函数来读取数据,参考此贴:http://bbs.06climate.com/forum.php?mod=viewthread&tid=4 ...

好的,我去学习一下~~谢谢老师!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-6 17:17:57 | 显示全部楼层
bearwoo 发表于 2017-11-6 16:38
好的,我去学习一下~~谢谢老师!

问题已解决,感谢老师
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-11-21 19:16:43 | 显示全部楼层
王老师,您好!按照您的脚本改写后出现了以下的错误,麻烦您看一看。

#Get file names
fn = 'F:\Meteoinfo\Data\Beijing.txt'

ncol = numasciicol(fn)
nrow = numasciirow(fn)
a = asciiread(fn,shape=(nrow,ncol))
lon = a[:,0]
lat = a[:,1]
pm= a[:,2]

#To grid data
x = arange(115, 117, 0.2)
y = arange(38, 42, 0.2)
gtemp,gx,gy = griddata((lon, lat), pm, xi=(x, y), method='idw', radius=0.8)
#Plot
axesm()
bou1_layer = shaperead('F:/MeteoInfo/Data/beijing.shp')
mlayer = shaperead('F:/MeteoInfo/Data/beijing.shp')
geoshow(bou1_layer, edgecolor='lightgray')
geoshow(mlayer, visible=False)

levs = [0, 25, 35, 50, 75, 95, 115, 130, 150,200]
cols = [(255,255,255),(0,255,0),(127,255,0),(255,255,0),(255,215,0),(255,128,0),(255,97,0), \
    (255,0,0),(176,23,31),(135,38,87),(255,0,255)]
#layer = contourfm(x, y, gtemp,20)  

layer = contourfm(x, y, gtemp,levs,colors=cols)
#slayer = scatterm(lon, lat,pm,colors=['k'], size=10)
slayer = scatterm(lon, lat,pm,levs,colors=cols, size=8)

masklayer(mlayer, [layer])
xlim(115, 117)
ylim(38, 42)
title(u'北京市空气质量站点PM2.5浓度',fontname=u'黑体',fontsize=20,bold=False,color='blue')   
text(113.3, 23.9, u'2018年2月25日00:00时', fontname=u'黑体', fontsize=16)
colorbar(layer)
以上是脚本,以下是出现的问题

>>> run script...
Traceback (most recent call last):
  File "<iostream>", line 6, in <module>
  File "E:\MeteoInfo\pylib\mipylib\dataset\midata.py", line 480, in asciiread
    a = ArrayUtil.readASCIIFile(filename, delimiter, headerlines, datatype, shape, rfirstcol)
        at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
        at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
        at java.lang.Double.parseDouble(Unknown Source)
        at org.meteoinfo.data.ArrayUtil.readASCIIFile(ArrayUtil.java:122)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
java.lang.NumberFormatException: java.lang.NumberFormatException: For input string: "??1

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-11-22 13:27:57 | 显示全部楼层
Reaxcila 发表于 2018-11-21 19:16
王老师,您好!按照您的脚本改写后出现了以下的错误,麻烦您看一看。

#Get file names

可能是文件内容的问题,里面包含一些非数值的字符。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-1-21 16:19:11 | 显示全部楼层
王老师,您好!我在利用DataFrame读取数据,然后保存到一个新的DataFrame,然后保存数据有点问题,麻烦您有空帮忙看一下。
出现的问题是:在保存的文件里的数据全部都带有   array[数据]
  1. #510站
  2. fn = r'F:/data/station-510.txt'
  3. df= DataFrame.read_table(fn, delimiter=' ',format='%s',usecols=[5])
  4. Sta_510 = df['station'].values
  5. print Sta_510[0]
  6. #加密站
  7. f = r'F:/data/20120729.txt'
  8. df1= DataFrame.read_table(f, delimiter=' ',format='%s%{yyyy:MM:dd}D%{hh:mm:ss}D%s')#%s是因为站点号带字母,后面的%s因为数据格式问题只能读成字符串
  9. #站点读取
  10. Sta_jiami = df1['a'].values
  11. print Sta_jiami[0]

  12. #510匹配加密站点
  13. #匹配数据和时间
  14. Sumdata = []
  15. Time_new = []
  16. STATION = []
  17. for i in arange(2):#随便选了两个站从20个站里匹配
  18.     for j in arange(20):
  19.         if Sta_510[i]==Sta_jiami[j]:   
  20.             jiami_lic = df1.iloc[j:j+1,3:4].values
  21.             Station = df1.iloc[j:j+1,0:1].values  
  22.             STATION.append(Station)
  23.             Sumdata.append(jiami_lic)                     
  24.             print jiami_lic
  25.             #时间转化
  26.             Year_month_day = df1['Date(yyyy:MM:dd)']
  27.             hour_min_sec = df1['Time(hh:mm:ss)']
  28.             a =  miutil.pydate(hour_min_sec[j])
  29.             b =  miutil.pydate(Year_month_day[j])
  30.             delta = datetime.timedelta(hours=a.hour,minutes=a.minute,seconds=a.second)
  31.             c = b+delta
  32.             print c
  33.             Time_new.append(c)
  34.               
  35. outdir = r'F:/data'            
  36. Sumdata = array(Sumdata)
  37. #STATION = array(STATION)
  38. #数据保存
  39. df2 = DataFrame(Sumdata,index=Time_new,columns=['precipitation'])
  40. #df.insert(0,'StA',STATION)
  41. savefile = os.path.join(outdir, '20120729_511' + '.csv')
  42. df2.to_csv(savefile)
复制代码

保存数据.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-1-21 21:43:10 | 显示全部楼层
风格而才 发表于 2020-1-21 16:19
王老师,您好!我在利用DataFrame读取数据,然后保存到一个新的DataFrame,然后保存数据有点问题,麻烦您有 ...

24行的 Sumdata.append(jiami_lic)  是不是应该改为: Sumdata.append(jiami_lic.sum())   ?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-1-21 21:44:35 | 显示全部楼层
风格而才 发表于 2020-1-21 16:19
王老师,您好!我在利用DataFrame读取数据,然后保存到一个新的DataFrame,然后保存数据有点问题,麻烦您有 ...

24行的 Sumdata.append(jiami_lic)  是不是应该改为: Sumdata.append(jiami_lic.sum())   ?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-1-22 08:41:29 | 显示全部楼层
本帖最后由 风格而才 于 2020-1-22 08:56 编辑
MeteoInfo 发表于 2020-1-21 21:44
24行的 Sumdata.append(jiami_lic)  是不是应该改为: Sumdata.append(jiami_lic.sum())   ?

加了后报错。我把数据附上了,麻烦您有空再帮忙看看,谢谢!
            Sumdata.append(jiami_lic.sum())  
            STATION.append(Station.sum())     
>>> run script...
Traceback (most recent call last):
  File "<iostream>", line 23, in <module>
  File "D:\MeteoInfo\pylib\mipylib\numeric\core\multiarray.py", line 601, in sum
    return ArrayMath.sum(self._array)
        at org.meteoinfo.ndarray.ArrayString.getDouble(ArrayString.java:351)

        at org.meteoinfo.ndarray.IteratorFast.getDoubleNext(IteratorFast.java:78)

        at org.meteoinfo.math.ArrayMath.sum(ArrayMath.java:5346)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

org.meteoinfo.ndarray.ForbiddenConversionException:org.meteoinfo.ndarray.ForbiddenConversionException

20120729.txt

598.86 KB, 下载次数: 3, 下载积分: 金钱 -5

station-510.txt

44.88 KB, 下载次数: 2, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表