python 倒数两列_Python和Fortran注意事项

之前学习python和fortran的时候已经查过很多次相关内容了,有的内容也会添加到网页收藏夹里。但由于我干的事情很杂(也可能是记性不好),查过的东西总是会忘,忘了再查,查了再忘,索性就专门整理一下以备不时之需吧。(不定期更新)

一、python

1、查找import库的位置

python 

二、numpy

1、将数组内nan的值转为0.0

a

2、数组内某数的个数和位置

np.sum(a == 1)
np.where(a ==1)

3、将某列中含有某值的行删除

用到了取反~

site_id_from_step1 = site_id_from_step1[~site_id_from_step1.loc[:,2].isin([-1])]

4、删除有nan的行

delete_nan = pd.DataFrame(delete_nan)
delete_nan = delete_nan.dropna(axis=0,how='any') # 删除有nan的行
delete_nan = delete_nan.dropna(axis=0,how='all') # 删除所有列都是nan的行

5、将数组重复n遍

x = np.tile(ec_lon[0], ec_lat.shape[0])

第一个参数是需要被重复的数组,第二个输入参数是重复几遍的几

三、matplotlib

1、contourf(x, y, z, np.arange(np.min(z), np.max(z)+0.01,0.01))中为第四个参数来控制显示范围和间隔

2、如果子图的标题和上一个子图的xlabel重合了

plt.tight_layout()即可

3、涉及到basemap绘图的时候,有时候莫名其妙,figure的外框没了,用常规的方法如:

ax = plt.subplot(111)
ax.spines['top'].set_visible(True)

行不通,那么解决办法是

m.drawparallels(np.arange(0., 52., 0.5), labels=[1,0,0,0], fontsize=20,linewidth=1.0)

重点是linewidth加上就行,当然有时候直接重启Spyder也能解决问题

4、关于plt.hist

count 

n是每个间隔内数值出现的个数,bins是每个间隔的位置(每个间隔分左右端,bins包含了第一个间隔的左端和最后一个间隔的右端,所以bins.shape[0]=n.shape[0]+1),spatches不用管。

常规得到的是频数分布图,即纵坐标表示每个间隔内数值出现的个数。若想改为频率分布直方图,老版的matplotlib用到了normed,设为True或者非0数即可,得到的结果是n的值与相应间隔的长度相乘结果为1。

若想得到纵坐标是出现的频率,且不需要面积为1(即上述normed=True),那么有两种办法,第一种如plt.subplot(513),即把hist得到的n通过plt.bar重新绘制;第二种方法是利用plt.hist中的weights,如plt.subplot(515)中的设置,即可得到频率单位为%的结果。第二种方法更为简单。

多说一句,如果是以hist的形式来比较两组数据,最好还是使用normed=True即标准化之后的结果。因为,如果不进行标准化,只是呈现原始数据的话,由于两组数据的间隔范围与间隔长度是不同的,所以会导致看上去是不平衡不协调的。

5、关于spines的相关操作:

plt.gca().spines["top"].set_alpha(0.0)    
# plt.gca().spines["bottom"].set_alpha(1.2)
plt.gca().spines["right"].set_alpha(0.0)    
# plt.gca().spines["left"].set_alpha(1.2) 
plt.gca().spines['bottom'].set_linewidth(2.0)
plt.gca().spines['left'].set_linewidth(2.0)

四、Pandas

1、关于DataFrame插入、删除、重命名列[Post_model.py]

d33715abf552660bb5922033dc03adab.png

2、读入带有日期格式的数据

2.1 、日期和时间分为了两列

3f6c0820d631de1a3c7ca5d0f633f74b.png

2.2 、日期时间格式不是常规格式

06b0d0ad02eb9686b4fd0dc9f266578c.png

3、发现如下错误,可能是文件确实不存在,修改代码过程中,重复使用某个变量,使得原始变量值被覆盖,当然也会出现windows系统把.txt变为了.txt.txt格式(百度时看到的例子)

4efdac98b1e3b06c22548abb2181463a.png

4、处理如图所示,相对复杂的excel时(以读取温度为例,风场类似[Post_WRF.py]):

2b10adba96abe7328c5ab6f2071f65b0.png
data_obs 

通过上述两步可得到如下结果(重点是pandas的.str.split命令):

8034344464f35f4523ebbbd6e5a1c7fc.png
data_obs_T2['zhengfu'] = data_obs_T2[0].str[:1]
data_obs_T2['values']  = data_obs_T2[0].str[1:]

然后得到:

7d73c70c0748c994975f5d96df064522.png

随后用一个for循环遍历整个DF,得到相应的结果,注意str2float直接float()即可,同时还包含有一个UTC2LST的转化:

real_data = np.zeros((data_obs_T2.values.shape[0]))
for i in np.arange(0,data_obs_T2.values.shape[0]):
    if data_obs_T2['zhengfu'][i] == '-':
        param = -1.0
    else:
        param = 1.0
    tmp1 = float(data_obs_T2['values'][i])
    tmp2 = param * tmp1 / 10
    real_data[i] = tmp2
data_obs_T2['real values'] = real_data
data_obs_T2 = data_obs_T2['real values']
data_obs_T2_index = data_obs_T2.index
data_obs_T2_index = data_obs_T2_index + pd.Timedelta(hours=8)
data_obs_T2.index = data_obs_T2_index

五、basemap

1、readshapefile[ZYC_flexpart_D20200703_autosave.py]

这个函数的第一个输入参数是路径,第二个是属性名,随便输入啥都可以。此外,如果用这个函数读取别人给你的shp文件发现读取失败时,可能是编码的原因,可添加default_encoding参量

m

六、Fortran

1、do循环的等价性

do 

2、Fortran居然有个判断NaN的函数 isnan()

if ( isnan(a) ) then

   write(*,*) 'a is NaN'

end if

七、linux

1、vim显示某字符串出现次数

:%s/字符串//ng

2、如果碰到一个巨大的文件想要vim,但是内存不给力咋办

head -n 100000 log.out > log.out_head_100000
tail -n 100000 log.out > log.out_tail_100000

3、关于等号前后要不要空格的问题

  1. 针对.bashrc,在export变量的时候等号前后不能有空格
  2. 针对csh shell脚本,set变量的时候前后一定要有空格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PythonFortran的混合编程可以通过使用F2PY(Fortran to Python)工具来实现。F2PY是一个用于将Fortran代码转换为Python可调用模块的工具,它可以将Fortran代码编译成Python模块,使得Python代码可以调用Fortran代码。 以下是Python封装Fortran的步骤: 1. 编写Fortran代码,并创建一个Fortran模块文件。例如,假设我们有一个Fortran程序文件`test.f90`,其中包含一个名为`add`的子程序,它可以计算两个整数的和。我们可以使用以下命令编译Fortran代码,生成一个名为`test_module.so`的共享库文件: ``` f2py -c -m test_module test.f90 ``` 2. 在Python中导入创建的Fortran模块。可以使用以下代码: ```python import numpy as np from test_module import add a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = add(a, b) print(c) ``` 在上述代码中,我们首先导入了Numpy库和我们创建的Fortran模块`test_module`中的`add`子程序。然后,我们使用Numpy创建了两个数组`a`和`b`,并将它们作为参数传递给`add`子程序。最后,我们打印输出结果。 注意,在使用F2PY封装Fortran代码时,需要将Fortran代码中的变量类型和Python中的变量类型进行匹配。同时,还需要考虑Fortran代码中的数组是按列存储还是按行存储的,以及是否使用了Fortran特有的数组下标从1开始的特性。 除了使用F2PY进行Python封装Fortran外,还可以使用Cython、SWIG等工具进行混合编程。这些工具都可以将Fortran代码编译成Python可调用模块,使得Python代码可以调用Fortran代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值