pandasrw库有效提升了pandas 读取excel和csv表格性能和易用性,大大方便了新手的使用,可以有效解决下列问题。pandasrw的名称是pandas read和write的缩写,目前支持excel、csv和pickle文件的读写。本库与pandas高度兼容读取的文件生成pandas的DataFrame,后续各种操作与pandas相同。
https://github.com/stormtozero/pandasrw
pip install pandasrw
from pandasrw import load,dump
问题一、后缀不对导致无法读取
1、报错 ‘utf-8’ codec can’t decode byte 0x87 in position 10: invalid start byte
下面代码文件时xlsx,却用read_csv会报上面的错误
path1=r"D:data2023xx.xlsx"
pd.read_csv(path1)
2、报错 Excel file format cannot be determined, you must specify an engine manually.
下面代码文件时csv,却用read_excel会包上面的错误
path1=r"D:data2023xx.csv"
pd.read_excel(path1)
解决方法: 使用pandasrw库中的load函数,该函数自适应文件的后缀,无需再考虑文件后缀。
from pandasrw import load
df=load(path1)
问题二、编码方式不对导致无法读取
pandas 读取CSV,错误:‘utf-8‘ codec can‘t decode byte 0xb7 in position 24: invalid start byte
解决方法: 使用pandasrw库中的load函数,该函数自适应文件的编码方式,无需再考虑编码方式。
from pandasrw import load
df=load(path1)
问题三、pandas怎么追加写入excel ?
pandas 最常用的to_excel 无追加功能,需要创建ExcelWriter来实现,过程繁琐。
解决方法: 使用pandasrw库中的dump函数,使用参数mode=“a”。
from pandasrw import load
dump(df, file_path, mode="a", sheetname='Sheet1')
问题四、pandas无法从指定单元格开始写入excel
pandas只能从A1单元格开始写入内容。需要指定写入文件开始单元格的情况时,引擎必须使用xlwings库,既engine == “xlwings”,如从B2开始写示例如下:
解决方法: 使用pandasrw库中的dump函数,使用参数cell=‘B2’
from pandasrw import dump
dump(df, file_path, mode="a", sheetname='Sheet1',engine="xlwings", cell='B2')
问题五、pandas写入excel时,无法给后缀添加写入时间
pandas写入excel时无法给后缀加上写入时间,需要许多额外代码
解决方法: 使用pandasrw库中的dump函数,当参数 time=True 时能够在文件后缀上自动添加写入时间的功能,时间格式为 -年月日_时分
from pandasrw import dump
dump(df, file_path, sheetname='Sheet1', time=True)
问题六、pandas 无法实时的查看表
当在jupyter等交互环境中时,无法使用pandas 无法实时的通过excel查看表
解决方法: 使用pandasrw库中的view函数,可以在excel中打开DataFrame和文件路径进行查看。输入参数f既可以是文件路径也可以是DataFrame。
from pandasrw import view
view(f)
问题七、pandas 打开较大的excel时非常慢,如何提速
解决方法: 使用pandasrw库中的load函数,可以比pandas提升2到3倍的读入效率。当文件特别大时将引擎改为xlwings,可以提升更大的效率。
例如:文件超过100M时
from pandasrw import load
df=load(path1,engine="xlwings")
问题八、pandas 无法进行excel的流式加载,文件大于内存时,无法处理
pandas 无法进行excel的流式加载,文件大于内存时,无法进行分批处理
解决方法: 使用pandasrw库中的load_stream_row函数。
file_path是路径, row_count是每次读取的行
from pandasrw import load_stream_row
load_stream_row(file_path, row_count,col_name=None)
生成一个pandas.io.parsers.readers.TextFileReader对象
对于该迭代器对象,通过遍历迭代器分块运算
4.1、遍历迭代器
4.2、对于迭代器中的每个DataFrame进行运算
4.3、采用追加写(功能mode=”a”或者mode=“a+”)的方式写入csv。
注意:file_result_csv和上文函数中的file_path_csv绝对不能相同,即读取的csv和存入的csv不能同路径。否则会不停的迭代下去,不能退出循环。
原因:使用chunksize分块读取后,pandas并没有真正的将csv的内容加载入内存,只是解析了csv的内容和建立了连接(类似浅拷贝),在调用迭代器时再从csv中加载。所以再使用追加写的时候,会一边写入csv,一边再从csv中读取,形成死循环。
for df in df_iter:
df=运算结果
df.to_csv(file_result_csv,mode="a", index=False,encoding='UTF-8',header=False)
示例3:输入路径读取Sheet1表的全部列,生产pandas的DataFrame 默认使用polars引擎。该表可以是xlsx、xlsx、csv和pkl格式
df_iter=load_stream_row(file_path, row_count)
问题九、如何将csv转化为utf8编码
encode_to_utf8(filename, des_encode)
问题十、如何将xlsx转换为csv
使用pandas将xlsx转换为csv,需要先读取xlsx再写入csv;代码多,执行慢。
解决方法: 使用pandasrw库中的load函数,会在file_path文件夹下生成一个同名csv文件,本方法速度远远快于上述方法。
from pandasrw import xlsxtocsv
xlsxtocsv(file_path)
原文地址:https://blog.csdn.net/A41915460/article/details/132655150
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27250.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!