91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決使用openpyxl時遇到的問題

發布時間:2021-03-15 10:53:28 來源:億速云 閱讀:508 作者:TREX 欄目:開發技術

本篇內容主要講解“如何解決使用openpyxl時遇到的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決使用openpyxl時遇到的問題”吧!

最近在用python處理Excel表格是遇到了一些問題

1, xlwt最多只能寫入65536行數據, 所以在處理大批量數據的時候沒法使用

2, openpyxl 這個庫, 在使用的時候一直報錯, 看下面代碼

from openpyxl import Workbook
import datetime

wb = Workbook()
ws = wb.active 
ws['A1'] = 42 
ws.append([1,2,3]) 
ws['A2'] = datetime.datetime.now()
wb.save('test.xlsx')

報錯信息如下

File "src\lxml\serializer.pxi", line 1652, in lxml.etree._IncrementalFileWriter.write TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element

有沒有人知道是什么原因呀? 惆悵!!!

got invalid input value of type <class ‘xml.etree.ElementTree.Element'>, expected string or Element

填坑:

出現這個問題好久了, 不知道怎么解決, 也去google 和baidu搜索, 一篇文章提到了可能是包沖突的問題, 抱著試一試的心態, 沒想到解決了

lxml 這個包和openpyxl 起沖突, 解決辦法, 先卸掉lxml

pip uninstall lxml

最后運行上面處理excel的代碼, 運行成功, 無錯誤!!! 困擾了我很長時間的問題得以解決!!!

還有另一種方法:

由于lxml 包經常要用到, 所以每次卸載掉再安裝實在是麻煩, 所以我有下面的想法

例如下面的代碼, 從數據庫中取數據存入表格

import pymysql
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://user:password@ip:port/database",encoding='utf-8')

sql = """SELECT catalog_1 as '目錄一',catalog_2 as '目錄二',catagory as '目錄三',
    region as '區域',year as '年份',data as '數據',unit as '單位' from table
    where catalog_1 = "農業" limit 100
"""
df = pd.read_sql_query(sql, con=engine)


# writer = pd.ExcelWriter(r'C:\Users\Administrator\Desktop\test.xlsx')
# df.to_excel(writer)
# writer.save()

這時候, 我們不選擇to_excel() 這個函數, 而是選擇使用to_csv() ; 即可避免openpyxl 和lxml 的沖突

df.to_csv(r'C:\Users\Administrator\Desktop\test.csv',index=False)
# 經過驗證, 此種方法是行得通的

最后得到的csv 文件用Excel 可以直接打開, 也可以另存為*.xlsx文件

最終解決辦法

今天發現我使用的openpyxl版本是3.0.2, 卸載此版本, 安裝3.0.0版本

最新更新于2020-3-16, 經過測試, 此報錯解除!

補充:Python—使用Openpyxl的dataframe_to_rows的一個小坑

這個坑說大不大,說小遇到了也頭疼。

一般我們把dataframe直接寫到Excel文件,直接 df.to_excel即可。不過如果想把多個表格寫入同一個工作表呢,那就需要用openpyxl的dataframe_to_rows功能。

看下面一段代碼。

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])
df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])
wb=Workbook()
ws=wb.active #打開工作表
#把df1寫入工作表
for row in dataframe_to_rows(df1):
 ws.append(row)
#換行
ws.append([])
#把df2寫入工作表
for row in dataframe_to_rows(df2):
 ws.append(row)
wb.save('text.xlsx')

這段代碼就是把df1,df2都寫入到一個工作表,但一看結果,傻了,怎么標題行和內容之間多了空行啊

如何解決使用openpyxl時遇到的問題

看看空行是如何產生的呢

如何解決使用openpyxl時遇到的問題

原來多了一個None啊,難怪是空行,目測None是index帶來的,那就把index去掉唄

如何解決使用openpyxl時遇到的問題

這回None是沒有了,但是index的內容也想要顯示,怎么辦呢,這么辦:

如何解決使用openpyxl時遇到的問題

哈哈,這樣就完美了。這里reset_index的意思就是把index列,變成普通列,比如:

如何解決使用openpyxl時遇到的問題

如上圖,如果直接reset_index,index列變成普通列,但是列頭自動變成了index,這可不好,所以先給index列賦值,也就是df1.index.name=‘code'

最后代碼如下

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])
df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])
wb=Workbook()
ws=wb.active #打開工作表
df1.index.name='code1'
df2.index.name='code2'
#把df1寫入工作表
for row in dataframe_to_rows(df1.reset_index(),index=False):
 ws.append(row)
#換行
ws.append([])
#把df2寫入工作表
for row in dataframe_to_rows(df2.reset_index(),index=False):
 ws.append(row)
wb.save('text.xlsx')

結果,哈哈,完美

如何解決使用openpyxl時遇到的問題

到此,相信大家對“如何解決使用openpyxl時遇到的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芮城县| 承德市| 东乡县| 安国市| 全椒县| 兴化市| 鹿邑县| 汶上县| 宁国市| 阜阳市| 买车| 琼海市| 防城港市| 扶余县| 遂川县| 德惠市| 兴业县| 体育| 化州市| 崇信县| 塔河县| 木里| 东乡| 会昌县| 信丰县| 信宜市| 安多县| 土默特左旗| 东海县| 安国市| 晋中市| 财经| 玛纳斯县| 井陉县| 中江县| 区。| 思南县| 垫江县| 民权县| 满洲里市| 鹿泉市|