lizy169 发表于 2022-3-17 15:33

python pandas 读取EXCEL

各位大神、小伙伴...
你们遇到下面这种情况没?怎样解决的?

谢谢!!
在读取Excel,计算后输出时,出现错误:
df.to_csv('****.csv', encoding='GBK')

File "pandas\_libs\writers.pyx", line 55, in pandas._libs.writers.write_csv_rows
UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 15: illegal multibyte sequence

确定是这个表的其中一列“物料名称”的问题,不对这列进行计算,也不输出与这列相关的数据时,就不会报错
我手工查看了这列,没有发现这列数据有什么问题。


print(date.dtypes)date.info()

查看控制台如下:

物料名称         object
物料代码         object
当前计划状态       object
截止15日总计划    float64
已送货         float64
dtype: object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1324 entries, 0 to 1323
Data columns (total 5 columns):
#   Column    Non-Null CountDtype
---------    -------------------
0   物料名称      1238 non-null   object
1   物料代码      1323 non-null   object
2   当前计划状态    1321 non-null   object
3   截止15日总计划1323 non-null   float64
4   已送货       1323 non-null   float64
dtypes: float64(2), object(3)
memory usage: 51.8+ KB

进程已结束,退出代码0


PncB2INYyoKw0l9 发表于 2022-3-17 15:43

方便提供下文档吗

Romeo_Ahmed 发表于 2022-3-17 15:49

有没有试着全部改用utf-8呢

cykablyat 发表于 2022-3-17 16:03

可能是编码问题? 尝试改成encoding = "utf-8"    试试?

2014晴天 发表于 2022-3-17 16:09

本帖最后由 2014晴天 于 2022-3-17 16:23 编辑

#### 报错信息:
**UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 15: illegal multibyte sequence**


#### 初步结论:
**这个报错信息这么明显,转码问题,character '\xa0'在gbk编码中无法转化。**

#### 解决方法(两类三种):
##### 第一类---躲避法(非核心字符)
- 1、在转换前需要将“\xa0”替换掉
```string.replace(u'\xa0', u' ')```
- 2、在gbk解码时忽略掉不能解码的数据
```content.encode("gbk", 'ignore').decode("gbk", "ignore")```

##### 第二类---直面法(核心字符)
- 1、打开时就不转unicode字符
```encoding='utf-8'```
注:因为没有拿到源文件,不知道是什么编码,根据经验可以尝试gb2312,utf-8_sig,utf-16_sig,最好还是用chardet库跑一下编码

蓝风 发表于 2022-3-17 16:55

encoding='ansi'
encoding='utf-8_sig'
大概率就OK 了

zohoChou 发表于 2022-3-17 17:12

你read_csv的时候用编码为gbk了吗???
pandas内部默认的应该是utf-8吧,控制台能输出只是因为储存的控制台默认gbk,又把utf-8转换成了gbk吧…………

严重建议检查一开始的read_csv()

xls_x = pd.read_csv(
    "D:\\Documents\\学校事务\\Python\\compare\\新建文本文档.csv",encoding="gbk")

反正我这么写就没问题(windows的默认编码被我改成了utf,控制台默认utf,但是excel默认还是gbk的)

lizy169 发表于 2022-3-18 09:29

zohoChou 发表于 2022-3-17 17:12
你read_csv的时候用编码为gbk了吗???
pandas内部默认的应该是utf-8吧,控制台能输出只是因为储存的控制 ...

我用的pd.read_excel,好像没有encoding这个参数

lizy169 发表于 2022-3-18 09:42

蓝风 发表于 2022-3-17 16:55
encoding='ansi'
encoding='utf-8_sig'
大概率就OK 了

用过utf-8出来是乱码,按照你的方式加个sig就可以了,还是第一次知道sig这玩意,谢谢大家,又学到了一点:lol

lizy169 发表于 2022-3-18 09:44

2014晴天 发表于 2022-3-17 16:09
#### 报错信息:
**UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 15: ...

先了解一下chardet库,以前没用过,谢谢你了{:1_893:}
页: [1] 2
查看完整版本: python pandas 读取EXCEL