pandas无法读取excel,python pandas读取xlsx文件
友情提醒:
虽然程序中没有importopenpyxl模块,但是需要pip openpyxl模块来操作Excel,否则会报错。
-粗分割线-。
工作需要将一批csv文件转换成excel文件,进行数据计算和处理,因为csv文件是:分割成excel文件后,同名的列可能不在同一列。例如,具有相同已付价格名称的列,一个文件在AL列,两个在AO列,如果您简单地读取所有文件并合并它们,将导致数据被排放到错误的列中。在网上找了很多教程都没有现成的程序解决问题,只能自己动手了。
每个.xlsx文件都是有csv转换过来的,详见上一篇文章Python批处理csv文件到Excel - xlsx文件——利用熊猫库的处理思路(csv文件可以指定分隔符):
因为不是文件中的所有数据都有用,只有一部分列数据有用,所以可以根据文件中的列名得到索引号,根据索引号得到整列数据,然后将得到的列数据写入新的excel文件,添加for循环批量写入所有excel文件。为了区分每行数据来自哪个文件,可以在每个循环中读取指定的列数据后添加以下代码。列数据的标题是“Store ”,列内容是文件名。
#添加一列数据,将每个文件的名称添加到这个文件的数据中,确定哪个文件excel _ name=file.replace(。xlsx , )#提取每个excel文件的名称,去掉后缀df[ shop]=excel_name #新建一个名为“shop”的列,列数据为excel文件名DFS.
要合并的文件细节示例(黄色背景色是我打开文件后手动添加的,不是在程序中编写的)
合并文件res.xlsx的示例:
处理代码:#-*-编码:UTF-8-*- 使用熊猫将多个excel表格中指定的列数据合并为一个;因为原来的多条数据有相同的列名,因为原来的多条excel是从csv文件转换过来的,我们只需要部分列数据,所以,指定的列被提取并汇总到res文件“import osimport pandas as pd #”中。输入参数是excel表所在的目录,def to_one_excel(dir): dfs=[] #。遍历文件目录,将所有表表示为DataFrame objects # for root _ dir,sub _ dir,files in OS . walk(r dir)in pandas:#第一个是起始路径,第二个是起始路径下的文件夹,第三个是起始路径下的文件。对于root _ dir,sub _ dir,os.walk (dir)中的文件:#第一个是起始路径,第二个是起始路径下的文件夹,第三个是起始路径下的文件。for file in files:if file . ends with( xlsx ):#构造绝对路径file _ name=OS . path . join(root _ dir,file)# df=PD . read _ excel(file _ name)df _ 1=list(PD . read _ excel(file _ name, Nrows=1)) #读取excel第一行数据放入列表# excel第一行数据返回列表print(file _ name)print(type(df _ 1))print(df _ 1)#根据第一列名获取每个文件中所需列的列索引, 返回索引值suo _ yin _ 1=df _ 1 . index( billing country )suo _ yin _ 2=df _ 1 . index( createdat )suo _ yin _ 3=df _ 1 . index( updatedat )O _ yin _ 4=df _ 1 . index( paid price )suo _ yin _ 5=df _ 1 . index( shipment type name )suo _ yin _ 6=df _ 1 . index( status )#读取文件内容usecols=[1,3列df=PD。 read _ excel (file _ name,use cols=[索_尹_ 1,索_尹_ 2,索_尹_ 3,索_尹_ 4,索_尹_ 5,索_尹_ 6],Sheet _ name= data )# pf=PD . read _ excel( XXX . xls ,use cols=[1,3,4],sheet _ name= data) # print (pf) #追加一列数据并将每个文件的名称追加到该文件的数据中,确定哪个文件excel _ name=file.replace(。xlsx , )#提取每个excel文件的名称,删除后缀df[ shop]=excel_name #并创建一个名为“shop”的新列。列是excel文件名dfs.append(df) #将新的store列追加到汇总excel中#合并行df _ df_concated=pd.concat(dfs) #构造输出目录的绝对路径out_path=os.path.join(dir,Res.xlsx) #输出到excel表,删除默认索引列df _ concated . to _ excel(out _ path,sheet _ name= sheet1 ,index=none) #调用并执行函数to _ one _ excel(r c:\ users \ administrator \ desktop
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。