pandas处理excel表格

需求:
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"]]
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值