python处理问题汇总一(for循环range内设置小数,四舍五入,时间差,读写文件等)

您所在的位置:网站首页 改正数必须是整数吗 python处理问题汇总一(for循环range内设置小数,四舍五入,时间差,读写文件等)

python处理问题汇总一(for循环range内设置小数,四舍五入,时间差,读写文件等)

2023-12-14 16:50| 来源: 网络整理| 查看: 265

在用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.round

round() 方法返回浮点数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) 198

python计算两个时间相差的秒数

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

在这里插入图片描述

索引数字5: data.loc["b","B"] #行标签为b,列标签为B data.iloc[1,1] #5是第2行第2列,索引从0开始 索引区域5,8,6,9: data.loc['b':'c','B':'C'] data.iloc[1:3,1:3] #区间前闭后开

从文件中读取数据后,可通过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数据文件,创建好文件记得要关闭文件,不然读取不了文件内容 在这里插入图片描述 (2)读取txt文件

#读取txt文件 file=open("G:\\info.txt",'r',encoding='utf-8') userlines=file.readlines() file.close() for line in userlines: username=line.split(',')[0] #读取用户名 password=line.split(',')[1] #读取密码 print(username,password) 2.python读取csv文件 import csv file="G:\\info.csv" filename=open(file) reader=csv.reader(filename) for row in reader: print("用户名:%s"%row[0],"密码:%s"%row[1]) #数组下标是以0开始的 3.python写入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是否为nan

np.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