| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 917 人关注过本帖, 1 人收藏
标题:如何利用pandas正确导出excel表格?
只看楼主 加入收藏
广水一中肖聪
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2023-6-20
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:6 
如何利用pandas正确导出excel表格?
一个人没个师父带着学编程真的好难啊,往往一个简单的问题就得卡好几天。这不,又一个简单的问题碾压了我的智商。翻阅了十几本参考资料,可能是我悟性太低,没有读懂意思。
问题简要描述:
我写了一个循环,每次循环能得到一些数据,如何利用pandas将这些得到的数据写入excel表中?

查阅资料说是创建DataFrame对象,但是资料上给的例子都是一次性得到所有数据的情况下进行创建,我的问题在于每次循环里面得到的数据,下一轮循环时这些变量的值发生了变化,而且数据量有点大,用列举的方法创建DataFrame对象有点困难。
代码如下:
import pandas as pd
from selenium import webdriver
from selenium. import By
import time
import random
import ddddocr

url = "http://58.49.47.121:81/n_score/index.jsp"
columns=['姓名','身份证号','高考报名号','准考证号','语文','数学','英语','物理','化学','生物','总分']
#读取考生信息
df=pd.read_excel('info.xls')
i=0
#按行数进行循环,df.shape[0]表示df的总行数,不包括表头
while i< df.shape[0]:
    gaokaobaominghao=df.iat[i,0]
    #没有进行字符转换时总报错,转换后顺利通过
    gaokaobaominghao=str(gaokaobaominghao)
    name=df.iat[i,1]
    shenfenzhenghao=df.iat[i,2]
    #用Firefox浏览器打开url   
    driver = webdriver.Firefox()
    driver.get(url)
    #窗口最大化
    driver.maximize_window()
    #查找验证码位置
    img=driver.find_element(By.ID, "img_randCode")
    #对验证码进行截屏并保存为图片
    img.screenshot('yzm.png')
    #调用ddddocr对图片进行文字识别
    ocr=ddddocr.DdddOcr()
    with open("yzm.png",'rb') as f:
        image=f.read()
    res=ocr.classification(image)
    #如果验证码图片识别不对,跳出本次循环
    if len(res) != 4:
        continue;
    #使用driver.find_element找到需要输入数据的文本框,并输入对应文本
    driver.find_element(By.ID, "gkbmh").send_keys(gaokaobaominghao)
    driver.find_element(By.ID, "sfzh").send_keys(shenfenzhenghao)
    driver.find_element(By.ID, "yzm").send_keys(res)
    #点击查询按钮
    driver.find_element(By.ID, "cx").click()
    #找到查询结果,并用相应的变量存储数据
    xm=driver.find_element(By.ID, "result_xm").text
    sfzh=driver.find_element(By.ID, "result_sfzh").text
    gkbmh=driver.find_element(By.ID, "result_zkzh").text
    zkzh=driver.find_element(By.ID, "result_gkbmh").text
    #km1=driver.find_element(By.ID, "result_mc1").text
    #km2=driver.find_element(By.ID, "result_mc2").text
    #km3=driver.find_element(By.ID, "result_mc3").text
    #km4=driver.find_element(By.ID, "result_mc4").text
    #km5=driver.find_element(By.ID, "result_mc5").text
    #km6=driver.find_element(By.ID, "result_mc6").text
    score1=driver.find_element(By.ID, "result_score1").text
    score2=driver.find_element(By.ID, "result_score2").text
    score3=driver.find_element(By.ID, "result_score3").text
    score4=driver.find_element(By.ID, "result_score4").text
    score5=driver.find_element(By.ID, "result_score5").text
    score6=driver.find_element(By.ID, "result_score6").text
    totalscore=driver.find_element(By.ID, "result_totalscore").text
    #将数据存储在data[i]列表
    data[i]=[xm,sfzh,gkbmh,zkzh,score1.score2,score3,score4,score5,score6,totalscore]
    i+=1
    #关闭浏览器
    driver.quit()
 #创建新表格   
df.DataFrame(data=data,columns=columns)
df_merge.to_excel('result.xlsx')

错误提示信息如下:
Traceback (most recent call last):
  File "C:/Users/广水一中巡考电脑/Desktop/20230625/pd001.py", line 59, in <module>
    data[i]=[xm,sfzh,gkbmh,zkzh,score1.score2,score3,score4,score5,score6,totalscore]
AttributeError: 'str' object has no attribute 'score2'

应该就是最后几行代码写的有问题。

感谢大佬耐心指导小弟!!!!!!
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2023-7-1 15:49编辑过]

搜索更多相关主题的帖子: driver text import 循环 数据 
2023-07-01 15:44
广水一中肖聪
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2023-6-20
收藏
得分:0 
程序代码:
import pandas as pd
from selenium import webdriver
from selenium. import By
import time
import random
import ddddocr

url = "http://58.49.47.121:81/n_score/index.jsp"
columns=['姓名','身份证号','高考报名号','准考证号','语文','数学','英语','物理','化学','生物','总分']
#读取考生信息
df=pd.read_excel('info.xls')
i=0
#按行数进行循环,df.shape[0]表示df的总行数,不包括表头
while i< df.shape[0]:
    gaokaobaominghao=df.iat[i,0]
    #没有进行字符转换时总报错,转换后顺利通过
    gaokaobaominghao=str(gaokaobaominghao)
    name=df.iat[i,1]
    shenfenzhenghao=df.iat[i,2]
    #用Firefox浏览器打开url    
    driver = webdriver.Firefox()
    driver.get(url)
    #窗口最大化
    driver.maximize_window()
    #查找验证码位置
    img=driver.find_element(By.ID, "img_randCode")
    #对验证码进行截屏并保存为图片
    img.screenshot('yzm.png')
    #调用ddddocr对图片进行文字识别
    ocr=ddddocr.DdddOcr()
    with open("yzm.png",'rb') as f:
        image=f.read()
    res=ocr.classification(image)
    #如果验证码图片识别不对,跳出本次循环
    if len(res) != 4:
        continue;
    #使用driver.find_element找到需要输入数据的文本框,并输入对应文本
    driver.find_element(By.ID, "gkbmh").send_keys(gaokaobaominghao)
    driver.find_element(By.ID, "sfzh").send_keys(shenfenzhenghao)
    driver.find_element(By.ID, "yzm").send_keys(res)
    #点击查询按钮
    driver.find_element(By.ID, "cx").click()
    #找到查询结果,并用相应的变量存储数据
    xm=driver.find_element(By.ID, "result_xm").text
    sfzh=driver.find_element(By.ID, "result_sfzh").text
    gkbmh=driver.find_element(By.ID, "result_zkzh").text
    zkzh=driver.find_element(By.ID, "result_gkbmh").text
    #km1=driver.find_element(By.ID, "result_mc1").text
    #km2=driver.find_element(By.ID, "result_mc2").text
    #km3=driver.find_element(By.ID, "result_mc3").text
    #km4=driver.find_element(By.ID, "result_mc4").text
    #km5=driver.find_element(By.ID, "result_mc5").text
    #km6=driver.find_element(By.ID, "result_mc6").text
    score1=driver.find_element(By.ID, "result_score1").text
    score2=driver.find_element(By.ID, "result_score2").text
    score3=driver.find_element(By.ID, "result_score3").text
    score4=driver.find_element(By.ID, "result_score4").text
    score5=driver.find_element(By.ID, "result_score5").text
    score6=driver.find_element(By.ID, "result_score6").text
    totalscore=driver.find_element(By.ID, "result_totalscore").text
    #将数据存储在data[i]列表
    data[i]=[xm,sfzh,gkbmh,zkzh,score1.score2,score3,score4,score5,score6,totalscore]
    i+=1
    #关闭浏览器
    driver.quit()

 #创建新表格   
df.DataFrame(data=data,columns=columns)
df_merge.to_excel('result.xlsx')

2023-07-01 15:47
sheeboard
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:16
帖 子:79
专家分:442
注 册:2023-2-16
收藏
得分:0 
先整理好思路,读取考生信息的excel文件到df,用iterrows一条一条写入网页获取成绩数据,用一个二层嵌套list存储,每一次append成绩数据,df文件处理结束后把list转成另一个df,concat两个df,保存新的df到excel文件。接下来就是写代码了。
我只是举个例子,方法有很多,但处理过程思路一定要清楚,根据过程再去找方法实现。
2023-07-02 08:56
广水一中肖聪
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2023-6-20
收藏
得分:0 
回复 3楼 sheeboard
我现在就是没弄明白如何将数据存储为list,如何将list存为df
2023-07-02 10:00
广水一中肖聪
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2023-6-20
收藏
得分:0 
回复 3楼 sheeboard
我创建表格的代码为:
程序代码:
columns=['姓名','身份证号','高考报名号','准考证号','语文','数学','英语','物理','化学','生物','总分']
data[i]=[xm,sfzh,gkbmh,zkzh,score1.score2,score3,score4,score5,score6,totalscore]
df.DataFrame(data=data,columns=columns)

是不是有问题?
2023-07-02 10:03
sheeboard
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:16
帖 子:79
专家分:442
注 册:2023-2-16
收藏
得分:20 
全局变量,score_data=[]
循环内,score_data.append([score1,score2,score3.....]) #这个是数据存为list
循环结束,df2=pd.DataFrame(score_data,columns=['语文','数学','英语','物理'......]) #这个是list转dataframe
合并两个dataframe,df=pd.concat([df,df2],axis=1)

至于iterrows,自己去搜吧,就当练习,关键是两个对象一个是index,一个才是要用的row data。
当然用openpyxl也可以,学习没什么捷径,多多练习就是了,熟能生巧,到后来都是走套路。

[此贴子已经被作者于2023-7-2 12:59编辑过]

2023-07-02 12:56
广水一中肖聪
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2023-6-20
收藏
得分:0 
回复 6楼 sheeboard
感谢感谢,我一定多多练习
2023-07-03 08:12
快速回复:如何利用pandas正确导出excel表格?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062255 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved