研一用到的python知识总结

1.format函数
格式化字符串函数,接受任意个数的参数,位置也可以随意更改。
常用的一种方式:

print("年龄:{age},性别:{sex}".format(age=23,sex = '女'))
#我理解位置可以随意更改就是format中sex可以放在age前

在网上看到的:字典

dict = {"age":23,"sex":"女"}
print("年龄:{age},性别:{sex}".format(**dict))

列表

list = [23,"女"]
print("年龄:{0[0]},性别:{0[1]}".format(list))

输出都是:

年龄:23,性别:女

心得:使用format函数可以避免参数和其他内容混在一起的现象,不方便查看也不方便修改
在看别人paper中的模型的时候发现大家都爱用这种方式来设置参数,我自己写程序就喜欢一个一个设置参数…
2.enumerate()函数
用于将一个可遍历的数据对象(列表、元组、字符串等,我比较常在处理csv或者excel文件数据时用到)组合为一个索引序列,可以同时列出数据和数据下标,一般用在for循环中。
把excel表格内容读取后存成列表(用pandas的话,用df.values.to_list()这种)

list = ['赵','钱','孙','李']
for i , element in enumerate(list):
    print("这是《百家姓》第 {} 个 姓 {} ".format(i+1,element))

心得:但是pandas读取Excel为pd,我更多用的就是iloc这样的函数了
3.pandas中的apply、applymap、map
(1)apply()
让方程作用在一维向量上,一行或者一列(也是series,但是能使用功能更复杂的函数,map只能接受一个参数的函数,我一般就只用apply了)
(2)applymap()
让方程作用于df每一个元素
(3)map()
将函数作用于一个Series的每一个元素

我们平时经常用的是读取Excel得到一个dataframe,这里直接创建dataframe

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3,3),columns=['a','b','c'],index=['d','e','f'])
f = lambda x:x.max()+x.min()
df1 = df.apply(f,axis=1)
df2 = df.apply(f,axis=0)
print(df)
print(df1)
print(df2)

输出,其中axis=0是y轴操作,=1是x轴向操作

          a         b         c
d -0.839769  0.621662 -0.104818
e  0.888246 -0.249358 -0.267761
f  0.036634 -0.138499  1.155909
d   -0.218108
e    0.620485
f    1.017410
dtype: float64
a    0.048477
b    0.372303
c    0.888148
dtype: float64
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3,3),columns=['a','b','c'],index=['d','e','f'])
def reduce2(x):
    return x-2
df3 = df.applymap(reduce2)
print(df3)
          a         b         c
d -1.376674 -2.171564  0.143255
e -3.430472 -0.347179 -1.925782
f -3.953170 -1.507850 -1.005750

在进行数据处理的时候,经常要对某一行或者一列的字符串进行增删改,就可以利用apply函数,将增删改自定义的函数进行应用
4.join()函数
用于连接字符串,我之前总会用+,包括在接触format函数之前,但是看文章发现join函数很不错。

list = ['赵','钱','孙','李']
print(','.join(list))
赵,钱,孙,李

再一个就是合并路径的应用,比如处理多个文件,他们的前缀是相同的,只需要改最后一个文件路径

import os
str_path = ['aaa','bbb','ccc']
for strr in str_path:
    new_str = os.path.join('/abc/def/',strr)
    print(new_str)
/abc/def/aaa
/abc/def/bbb
/abc/def/ccc

然后就可以愉快地处理每一个文件中的内容了
接下来是我在论文提供的开源代码中常见的几个
5.divmod()函数
divmod(a , b)
得到(a//b,a%b)元组
以前本科的时候得到除数和余数,因为应用不多所以没觉得怎么好,在代码中常见是用于进制转换,将a(s)转换为h和min

a = 3601
#一个小时是3600s
m,s = divmod(a,60)
h,m = divmod(m,60)
print(h,m,s)

6.计算模型运行时间

import time
tic = time.time()
#中间随便做点什么
a = 3601
m,s = divmod(a,60)
h,m = divmod(m,60)
toc = time.time()
a = toc-tic
print(a)
1.9073486328125e-06

7.对矩阵进行操作
(1)np.dot(a,b)矩阵乘法
传统的ab是元素相乘,dot就可以按照线代中教的行列进行操作了
(2)X.reshape(X.shape[0],-1).T
将(a ,b , c ,d)维度的矩阵变成(bcd,a)的形式
这个是在做吴恩达老师DL课程作业的时候遇到的,bcd属于一篇图片,a是样本数。处理完以后就可以进行后续操作了。
8.序列解包
看大神们的代码进行看到,我自己一般不太习惯用。
for x,y in zip(keys,values)

list_1 = [1,2,3,4]
list_2 = ['赵','钱','孙','李']
for x,y in zip(list_1,list_2):
    print(x,y)
1 赵
2 钱
3 孙
4 李

在网上看enumerate也算是序列解包
9.import于from…import区别

import datetime
print(datetime.datetime.now())
from datetime import datetime
print(datetime.now())

加了from …import后就可以不用在使用的时候加模块名的限定了。

参考链接:
pandas数据处理三板斧——map、apply、applymap详解
初学者滥用python的5个情景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值