赞
踩
需求:
1.对特定的合并单元格,进行填充
2.将某一列为空的一行删除
3.将某一列出现“同4”的那一行删去,保留类似“xml相同”,“json相同”的行
4.将某一列为“ntn”的那一行删除
5.将出现的“正常”的字符串改为“正常输出结果”
6.将“引擎异常”改为“引擎报错”
7.抽取其中的序号列,以及Unnamed:4,Unnamed:5这一列
8.将文件名的后缀由.xlsx改为.txt
|
| |
import pandas as pd import re import os import path if __name__=='__main__': xlsx_dir="C:\\Users\\wwj\\Desktop\\新建文件夹" file_path=" " names=os.listdir(xlsx_dir) #列出文件夹下的文件名 for name in names: if name=='11.29.xlsx': file_path=os.path.join(xlsx_dir,name) df=pd.read_excel(file_path) #df.loc[10:14,["Unnamed: 4"]]=df.loc[8,["Unnamed: 4"]] df.loc[10:14,["Unnamed: 4"]]=df.fillna(method='ffill').loc[10:14, ["Unnamed: 4"]] for i, row in df.iterrows(): #print(i,row["Unnamed: 4"],row["Unnamed: 5"]) if re.search(".*ntn.*",row["Unnamed: 5"]): df=df.drop(axis=0,index=i) continue if type(row["Unnamed: 4"]) is float: df=df.drop(axis=0,index=i) continue if type(row["Unnamed: 2"]) is not float and re.search("^同.*",row["Unnamed: 2"]): df=df.drop(axis=0,index=i) #axis=0为行 index代表第i行 continue if re.search(".*正常.*",row["Unnamed: 4"]): df.loc[i,"Unnamed: 4"]='正常输出结果' if re.search(".*异常.*",row["Unnamed: 4"]): df.loc[i,"Unnamed: 4"]='引擎报错' df=df.loc[0:,["序号","Unnamed: 4","Unnamed: 5"]] print(df) split_file=os.path.splitext(name) #split_file=["11.29","xlsx"] old_ext=split_file[-1] print(old_ext) new_ext='.txt' newfile=split_file[0]+new_ext newfile_path=os.path.join(xlsx_dir, newfile) print(newfile_path)#C:\\Users\\wwj\\Desktop\\11.2901.txt #df.to_excel("C:\\Users\\wwj\\Desktop\\11.2901.xlsx") df.to_csv(newfile_path, sep='\t', index=False,header=False) #写成txt文本 双斜杆的问题 通过在路径前加r来解决 #index代表序号,header代表每一列的表头
需要注意的是:
1.excel中某一个地方空的话,NAN为float类型
2.合并单元格 的第一个地方是具体的数值,剩余的地方为NAN,float类型
3.每一列的列头为空的话,pandas读取的时候,会认为是Unnamed:0,1,2,3…
4.运用正则re 包, re.search(“^同.*”,row[“Unnamed: 2”])
"^"代表匹配字符串开头,“$"代表匹配字符串末尾
5.把name的具体值和后缀拆开成为列表
os.path.splitext(name)
6.将dataframe保存为txt格式
df.to_csv("C:\\Users\\wwj\\Desktop\\11.2901.txt", sep='\t', index=False,header=False)
7.处理特定位置的合并单元格(ffiill代表向后填充)
df.loc[10:14,["Unnamed: 4"]]=df.fillna(method='ffill').loc[10:14, ["Unnamed: 4"]]
8.以行来进行遍历:
for i, row in df.iterrows():
9.删除某一行:
df=df.drop(axis=0,index=i)#axis=0为行 index代表第i行
10.对特定位置赋值:
df.loc[i,"Unnamed: 4"]='正常输出结果'
11.只保留特定的列:
df=df.loc[0:,["序号","Unnamed: 4","Unnamed: 5"]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。