python处理问题汇总一(for循环range内设置小数,四舍五入,时间差,读写文件等) |
您所在的位置:网站首页 › 改正数必须是整数吗 › python处理问题汇总一(for循环range内设置小数,四舍五入,时间差,读写文件等) |
在用python处理数据的过程中,遇到了一些问题,查阅资料解决后,特此总结,方便以后查看。 一、如何设置for循环的range函数为小数我们在使用for循环的时候,for循环可以遍历任何序列的项目,如一个列表或者一个字符串。 一般使用的语法为: for iterating_var in sequence: statements(s)另外一种执行循环的遍历方式是通过索引,如下实例: fruits = ['banana', 'apple', 'mango'] for index in range(len(fruits)): print '当前水果 :', fruits[index]以上实例我们使用了内置函数 len() 和 range(),函数 len() 返回列表的长度,即元素的个数。 range返回一个序列的数。 python range() 函数可创建一个整数列表,一般用在 for 循环中。 语法: range(start, stop[, step]) start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)这里无论是start,stop,step都是整数,如果想循环小数,比如range(0.1,0.5,0.01) for i in range(0.1, 0.5, 0.01): print(i)则出错: Traceback (most recent call last): File "C:/Users/admin/PycharmProjects/untitled/learnpy.py", line 1, in for i in range(0.1, 0.5, 0.01): TypeError: 'float' object cannot be interpreted as an integer这个时候,可以使用np.arange(0.1, 0.5, 0.01)来解决: import numpy as np for i in np.arange(0.1, 0.5, 0.01): print(i) 0.1 0.11 0.12 0.13 ...可以参考https://stackoverflow.com/questions/477486/how-to-use-a-decimal-range-step-value。 同时,还可以使用 np.linspace(a, b, num) for i in np.linspace(0.1, 0.5, 5): print(i) 0.1 0.2 0.3 0.4 0.5 二、python中的四舍五入问题在处理数据的时候,有时候需要近似处理,经常使用的就是四舍五入的方法。python提供了几种四舍五入的方法。 1.roundround() 方法返回浮点数x的四舍五入值。 round( x [, n] )round函数可以保留n位小数,但不建议使用, 比如 print(round(2.235, 2)) print(round(2.345, 2)) 2.23 2.35一个四舍五入了一个没有,因为2.235在python内部存的是2.23499…的形式,四舍五入的时候末尾舍弃了,而2.345在python内部存储的是2.2345000…的形式。给定一个float类型的数我们无法知道其内部存储的形式,所以round用起来风险比较大。 如果非要用的话,可以在target number上加上一个比长度略长的小数,如下: a = 2.235 print(round(a*100)/100.0) 2.24 2.%.nf形式但这个也是不准的,如下: print("%.2f"%(2.235)) print("%.2f"%(2.345)) 2.23 2.35 3.Decimal函数四舍五入的准确的形式,注意Decimal内传入的是string的形式。 a = Decimal(str(a)).quantize(Decimal("0.00")) 4.向上向下取整 import math a = math.floor(10.63) #向下取整 print(a) b = math.ceil(10.63) #向上取整 print(b) 10 11 三、python计算时间差如何方便的计算两个时间的差,如两个时间相差几天,几小时等,使用datetime模块可以很方便的解决这个问题。 import datetime d1 = datetime.datetime(2019, 3, 23) d2 = datetime.datetime(2019, 10, 7) dayCount = abs((d1 - d2).days) print(dayCount) 198python计算两个时间相差的秒数 print((endtime - starttime).seconds)python计算时间相加,计算当前时间向后10天的时间。 import datetime d1 = datetime.datetime.now() d3 = d1 + datetime.timedelta(days=10) print(d3.ctime()) Sat Sep 12 14:08:02 2020其中参数可以是days, hours,minutes,seconds,microseconds,如果是负数就是向前多少时间。 其本上常用的类: datetime和timedelta两个。它们之间可以相互加减。每个类都有一些方法和属性可以查看具体的值,如 datetime可以查看:天数(day),小时数(hour),星期几(weekday())等;timedelta可以查看:天数(days),秒数 (seconds)等。 四、python对字符串切片操作从文件夹读取文件名,去掉后缀 path = ' ' path_list = os.listdir(path) print(path_list) for file in (path_list): filename = os.path.splitext(file)[0] #文件名,[1]为文件后缀字符串替换replace: filename = filename.replace('_', '') #将_去掉字符串去掉最后3个字符: filename = filename.replace(' ', '')[:-3].upper()strip函数 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符 s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符 注意: 当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉。可以参考Python学习:字符串的深入浅出 五、Python中元素索引函数loc[],iloc[]loc[]函数用行列标签选择数据,前闭后闭。 索引单个元素:通过行索引“index”中的具体值来取行数据。括号里面是先行后列,以逗号分割,行和列分别是行标签和列标签。 索引区域:矩形区域的行标签,矩形区域的列标签,行列标签之间用逗号隔开,行标签和行标签之间,列标签和列标签之间用冒号隔开。 iloc[]函数用于行列数选择数据,前闭后开。 索引标签不同,具体用法同.loc[]函数。 .loc[]函数只能访问整型,不能访问布尔索引。 import pandas as pd data = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]},index=["a","b","c"]) data从文件中读取数据后,可通过iloc或loc读取数据 data = pd.read_csv('F:/CH2019BST.csv', encoding="ISO-8859-1") time = data.iloc[:, 1] #time为第二列数据 time = time.tolist() #可以将数据直接转化为列表 六、python读取写入文件 1.python读取txt文件(1)创建txt数据文件,创建好文件记得要关闭文件,不然读取不了文件内容 将求得的变量写入txt文件: filename1 = 'G:/info.txt' with open(filename1, 'a') as f: f.write(str(info)) f.write('\n') 4.python写入csv文件 with open("G:\\user.csv", "a") as f: f.write(x) f.write('\n') 5.python中txt文件转csv文件 with open('G:/info.csv', 'w+', newline='') as csvfile: spamwriter = csv.writer(csvfile, dialect='excel') with open('G:/info.txt', 'r', encoding='utf-8') as filein: for line in filein: line_list = line.strip('\n').split(' ') spamwriter.writerow(line_list) 六、python判断list是否为nannp.isnan(只有数组数值运算时可使用) 注意:numpy模块的isnan方法仅支持对数值进行判断,因此传入的如果是字符串类型会报错 如果list是整数元素: import numpy as np np.isnan(number)如果list是字符元素: if name[i] is not np.nan : |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |