最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決使用openpyxl時遇到的坑

 更新時間:2021年03月13日 09:20:06   作者:景霄之上  
這篇文章主要介紹了解決使用openpyxl時遇到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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

填坑:

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

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

pip uninstall lxml

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

還有另一種方法:

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

例如下面的代碼, 從數(shù)據(jù)庫中取數(shù)據(jù)存入表格

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 '區(qū)域',year as '年份',data as '數(shù)據(jù)',unit as '單位' from table
    where catalog_1 = "農業(yè)" 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() 這個函數(shù), 而是選擇使用to_csv() ; 即可避免openpyxl 和lxml 的沖突

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

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

最終解決辦法

今天發(fā)現(xiàn)我使用的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都寫入到一個工作表,但一看結果,傻了,怎么標題行和內容之間多了空行啊

看看空行是如何產生的呢

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

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

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

如上圖,如果直接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')

結果,哈哈,完美

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • python django中8000端口被占用的解決

    python django中8000端口被占用的解決

    今天小編就為大家分享一篇python django中8000端口被占用的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python?Cloudinary實現(xiàn)圖像和視頻上傳詳解

    Python?Cloudinary實現(xiàn)圖像和視頻上傳詳解

    這篇文章主要介紹了Python?Cloudinary實現(xiàn)圖像和視頻上傳功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • Python全局變量global關鍵字詳解

    Python全局變量global關鍵字詳解

    這篇文章主要介紹了Python全局變量global關鍵字詳解,需要的朋友可以參考下
    2021-04-04
  • python實現(xiàn)掃雷游戲

    python實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python grequests模塊使用場景及代碼實例

    Python grequests模塊使用場景及代碼實例

    這篇文章主要介紹了Python grequests模塊使用場景及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • python中的bisect模塊與二分查找詳情

    python中的bisect模塊與二分查找詳情

    這篇文章主要介紹了python中的bisect模塊與二分查找詳情,bisect是python的內置模塊,?用于有序序列的插入和查找。?插入的數(shù)據(jù)不會影響列表的排序,更多詳細內容需要的朋友可以參考一下
    2022-09-09
  • 關于Python中兩個不同shape的數(shù)組間運算規(guī)則

    關于Python中兩個不同shape的數(shù)組間運算規(guī)則

    這篇文章主要介紹了關于Python中兩個不同shape的數(shù)組間運算規(guī)則,眾所周知,相同?shape?的兩個數(shù)組間運算是指兩個數(shù)組的對應元素相加,我們經常會碰到一些不同?shape?的數(shù)組間運算,需要的朋友可以參考下
    2023-08-08
  • Python3多目標賦值及共享引用注意事項

    Python3多目標賦值及共享引用注意事項

    這篇文章主要介紹了Python3多目標賦值及共享引用注意事項,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python開發(fā)必須掌握的Pip使用全攻略

    Python開發(fā)必須掌握的Pip使用全攻略

    在這篇文章中,我們將深入探討Python的主要包管理工具——Pip,包括Pip的基本概念、安裝和配置、中國國內鏡像源的使用等,需要的可以參考一下
    2023-07-07
  • Python實現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值

    Python實現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值

    本文給大家分享的是Python實現(xiàn)遍歷數(shù)據(jù)庫并獲取key的值的方法,主要是使用for循環(huán)來實現(xiàn),有需要的小伙伴可以參考下。
    2015-05-05

最新評論

额敏县| 吴江市| 木兰县| 奉贤区| 邛崃市| 卢氏县| 崇州市| 应用必备| 松桃| 江都市| 太仓市| 赣州市| 宁河县| 文水县| 邳州市| 绵阳市| 日土县| 通河县| 桓台县| 光山县| 孟连| 永州市| 绿春县| 天津市| 忻州市| 云霄县| 通江县| 富锦市| 洪洞县| 辉县市| 隆子县| 扎赉特旗| 高安市| 古蔺县| 皋兰县| 合川市| 阿巴嘎旗| 景谷| 东阿县| 昆山市| 崇阳县|