python将循环生成的变量写入excel(补充python 处理excel(生成,保存,修改))

思路来源:python-excel循环写入


import xlwt

book = xlwt.Workbook() #创建Excel
sheet = book.add_sheet('sheet1') #创建sheet页
data = [
    ["1","小花",99,100,98.5],
    ["2","小王",90,30.5,95],
    ["3","小明",67.5,49.6,88]
    ]

title = ['编号','姓名','语文成绩','数学成绩','英语成绩','总分','平均分'] #把表头名称放入list里面

#循环把表头写入
row = 0 
for t in title:
    sheet.write(0,row,t)
    row+=1

row = 1 # 从表格的第二行开始写入数据
# 一行一行的写,一行对应的所有列
for d in data:  #控制行
    sum_score = sum(d[2:]) #计算总分
    age_score = round(sum_score/3) #计算平均分
    d.append(sum_score) #添加总分到每一行
    d.append(age_score) #添加平均分到每一行
    col = 0
    for one in d:#控制每一列
        sheet.write(row,col,one) #rou代表列,col代表行,one写入值
        col+=1
    row+=1
book.save('student.xls')

报错情况
1.获取接口返回的值,存入excel时报错
Exception: Unexpected data type <class ‘dict’>

参链:python错误Exception: Unexpected data type

2.针对python向excel中写入数据调用write函数会出现Attempt to overwrite cell: sheetname=‘Sheet1’ rowx=1 colx=0的问题解决
3.python写入Excel遇到Exception: Attempt to overwrite cell

这是由于在建表的时候对一个单元格重复操作:
sheet.write(“infoPlist”)

解决办法如下:
添加cell_overwrite_ok=True
sheet.write(“infoPlist”,cell_overwrite_ok=True)

上述会报错误2,
将cell_overwrite_ok=True 放入.add_sheet函数里 ,而不是放在write函数中

参考:python写入Excel遇到Exception: Attempt to overwrite cell

参考:python向excel中写入数据调用write函数会出现Attempt to overwrite cell: sheetname=‘Sheet1’ rowx=1 colx=0

读取和修改生成的excel

问题:最开始直接利用网上搜到的代码:
在使用pd,DataFrame时会报错(关于编码的报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x0d in position 0: invalid contin),一直没找到解决办法

# 导入pandas包并重命名为pd
import pandas as pd
 
# 读取Excel中Sheet1中的数据
data = pd.DataFrame(pd.read_excel('test.xls', 'Sheet1'))
 
# 查看读取数据内容
print(data)
 
# 查看是否有重复行
re_row = data.duplicated()
print(re_row)
 
# 查看去除重复行的数据
no_re_row = data.drop_duplicates()
print(no_re_row)
 
# 查看基于[物品]列去除重复行的数据
#wp = data.drop_duplicates(['物品'])
#print(wp)
 
# 将去除重复行的数据输出到excel表中
no_re_row.to_excel("test2.xls")
 

没有报错的:

###############################
##### 读写excel(xls\xlsx)文件
import pandas as pd
import numpy as np
df_excel = pd.read_excel('data3.xlsx')
print('数据量行*列',df_excel.shape)
# # df_excel.to_excel('df_excel.xlsx',header=None)#生成文件保存,无表头
print('数据集中存在重复观测的数量:\n',np.sum(df_excel.duplicated())) #F为不存在,T为存在,用sum显示重复的数量
print('删除行重复后的数据\n',df_excel.drop_duplicates(subset=None,keep='first',inplace=None))#excel文件中设定第一和第二行为重复行,结果删除了第二行保留第一行
              ###df_excel.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
              #### 代码中subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。默认值为subset=None表示考虑所有列。
              #####keep='first'表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。
              #####inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本

print('数据集列中是否存在缺失值:\n',df_excel.isnull().any())       #F为不存在,T为存在
print('每一行的缺失值个数:',df_excel.isnull().sum(axis=1))
print('每一列的缺失值个数:',df_excel.isnull().sum(axis=0))

          ####### df.isnull().sum(axis=0)每一列的缺失值个数
          #####df.isnull().any()则会判断哪些”列”存在缺失值
df=df_excel.dropna()
print(df_excel.dropna(thresh=5))
                # #axis=0: 删除包含缺失值(NaN)的行
                # #axis=1: 删除包含缺失值(NaN)的列
                # # how=‘any' :要有缺失值(NaN)出现删除
                # # how=‘all': 所有的值都缺失(NaN)才删除
                # 还有一个thresh参数
                # thresh=n,保留至少有 n 个非 NaN 数的行
######drop用法
print(df_excel.drop(['edu'],axis=1))#按照列删除edu这一列
print(df_excel.drop([0],axis=0))#按照行删除0这一行

参考:python 删除excel表格重复行,数据预处理操作

总结:

data = pd.reda_excel(path)  #不用pd.DataFrame

data.duplicated()
data.to_excel(path)

## 注意事项
dp.read_csv  #不使用这个函数读取

Python基础教程:pd.drop_duplicates删除重复行的方法

物联沃分享整理
物联沃-IOTWORD物联网 » python将循环生成的变量写入excel(补充python 处理excel(生成,保存,修改))

发表评论