pandas 读取excel和csv表格数据常见问题及解决


pandasrw库有效提升了pandas 读取excel和csv表格性能和易用性,大大方便了新手的使用,可以有效解决下列问题。pandasrw的名称是pandas read和write的缩写,目前支持excel、csv和pickle文件的读写。本库与pandas高度兼容读取的文件生成pandas的DataFrame,后续各种操作与pandas相同。
https://github.com/stormtozero/pandasrw

通过pip进行安装

pip install pandasrw

在python中导入包

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:\data\2023\xx.xlsx"
pd.read_csv(path1)

2、报错 Excel file format cannot be determined, you must specify an engine manually.
下面代码文件时csv,却用read_excel会包上面的错误

path1=r"D:\data\2023\xx.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

原因为无法文件不是utf-8编码

解决方法: 使用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)
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风暴之零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值