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])
1. start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
2. stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
3. step:步长,默认为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<module>
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
...
同时,还可以使⽤
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提供了⼏种四舍五⼊的⽅法。
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 = il(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 = w()
d3 = d1 + datetime.timedelta(days=10)
ime())
Sat Sep 1214:08:022020
其中参数可以是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 = place('_','')#将_去掉
字符串去掉最后3个字符:
filename = place(' ','')[:-3].upper()
strip函数
函数原型
声明:s为字符串,rm为要删除的字符序列
s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符
s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符
s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符
注意:
1. 当rm为空时,默认删除空⽩符(包括’\n’, ‘\r’, ‘\t’, ’ ')
2. 这⾥的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉。
可以参考
五、Python中元素索引函数loc[],iloc[]
loc[]函数⽤⾏列标签选择数据,前闭后闭。
1. 索引单个元素:通过⾏索引“index”中的具体值来取⾏数据。括号⾥⾯是先⾏后列,以逗号分割,⾏和列分别是⾏标签和列标签。
2. 索引区域:矩形区域的⾏标签,矩形区域的列标签,⾏列标签之间⽤逗号隔开,⾏标签和⾏标签之间,列标签和列标签之间⽤冒号隔
开。
iloc[]函数⽤于⾏列数选择数据,前闭后开。
1. 索引标签不同,具体⽤法同.loc[]函数。
2. .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
1. 索引数字5:
data.loc["b","B"]#⾏标签为b,列标签为B
data.iloc[1,1]#5是第2⾏第2列,索引从0开始
2. 索引区域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 = list()#可以将数据直接转化为列表
六、python读取写⼊⽂件
1.python读取txt⽂件
(1)创建txt数据⽂件,创建好⽂件记得要关闭⽂件,不然读取不了⽂件内容
(2)读取txt⽂件
#读取txt⽂件
file=open("G:\\",'r',encoding='utf-8')
adlines()
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)
ader(filename)
for row in reader:
print("⽤户名:%s"%row[0],"密码:%s"%row[1])#数组下标是以0开始的
3.python写⼊txt⽂件
将求得的变量写⼊txt⽂件:
filename1 ='G:/'
python怎么读文件夹下的文件夹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:/','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 :

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。