numpy.savetext()存储csv文件并使用 pandas读取文件时报错

本文讨论了使用numpy.savetext()存储csv文件后,使用pandas.read_csv()读取时遇到的编码错误问题。错误源于编码设置不一致。解决方案是明确指定保存和读取时的编码参数。示例代码展示了如何生成随机数并存储为csv,以及正确读取的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy.savetext()存储csv文件并使用 pandas读取文件时报错


numpy.savetext()方法:

numpy.savetxt(fnameXfmt=‘%.18e’delimiter=’ 'newline=‘\n’header=‘’footer=‘’comments='# 'encoding=None)

delimiter是以其为标识来分隔 csv则使用**‘,’**进行分隔

header是写一个列名

encoding是编码方式


pandas读取csv文件方法:

pandas.read_csv(filepath_or_buffer, ***, sep=_NoDefault.no_defaultdelimiter=Noneheader=‘infer’names=_NoDefault.no_defaultindex_col=Noneusecols=Nonedtype=Noneengine=Noneconverters=Nonetrue_values=Nonefalse_values=Noneskipinitialspace=Falseskiprows=Noneskipfooter=0nrows=Nonena_values=Nonekeep_default_na=Truena_filter=Trueverbose=Falseskip_blank_lines=Trueparse_dates=Noneinfer_datetime_format=_NoDefault.no_defaultkeep_date_col=Falsedate_parser=_NoDefault.no_defaultdate_format=Nonedayfirst=Falsecache_dates=Trueiterator=Falsechunksize=Nonecompression=‘infer’thousands=Nonedecimal=‘.’lineterminator=Nonequotechar=‘"’quoting=0doublequote=Trueescapechar=Nonecomment=Noneencoding=Noneencoding_errors=‘strict’dialect=Noneon_bad_lines=‘error’delim_whitespace=Falselow_memory=Truememory_map=Falsefloat_precision=Nonestorage_options=Nonedtype_backend=_NoDefault.no_default)

这里我们就用到pandas.read_csv(path,header)

path是字符类型的csv文件路径:str, path object or file-like object

header默认为0,即显示第一列为列名


错误代码:

import pandas as pd
import numpy as np

data = np.random.randint(1, 10, 100)
np.savetxt('demo_csv.csv', data, delimiter=',', fmt='%.3e', header="数据")

indata = pd.read_csv('./demo_csv.csv', header=0)
print(indata)

生成100个1到10随机数,然后使用np.savetext()方法将其存储到demo_csv.csv文件中

再使用pandas读取数据

报错信息:

E:\python\python_sduty_project\venv\Scripts\python.exe E:\python\python_sduty_project\csv文件pandas用法.py 
Traceback (most recent call last):
  File "E:\python\python_sduty_project\csv文件pandas用法.py", line 9, in <module>
    indata = pd.read_csv('./demo_csv.csv', header=0)
  File "E:\python\python_sduty_project\venv\lib\site-packages\pandas\io\parsers\readers.py", line 912, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "E:\python\python_sduty_project\venv\lib\site-packages\pandas\io\parsers\readers.py", line 577, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "E:\python\python_sduty_project\venv\lib\site-packages\pandas\io\parsers\readers.py", line 1407, in __init__
    self._engine = self._make_engine(f, self.engine)
  File "E:\python\python_sduty_project\venv\lib\site-packages\pandas\io\parsers\readers.py", line 1679, in _make_engine
    return mapping[engine](f, **self.options)
  File "E:\python\python_sduty_project\venv\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 93, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas\_libs\parsers.pyx", line 548, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas\_libs\parsers.pyx", line 637, in pandas._libs.parsers.TextReader._get_header
  File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
  File "pandas\_libs\parsers.pyx", line 2017, in pandas._libs.parsers.raise_parser_error
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 2: invalid continuation byte

原因:encoding编码错误

import pandas as pd
import numpy as np

data = np.random.randint(1, 10, 100)
np.savetxt('demo_csv.csv', data, delimiter=',', fmt='%.3e', header="数据", encoding='utf-8')

indata = pd.read_csv('./demo_csv.csv', header=0, encoding='utf-8')
print(indata)


改为上面代码即可

运行结果如下:
E:\python\python_sduty_project\venv\Scripts\python.exe E:\python\python_sduty_project\csv文件pandas用法.py 
    # 数据
0    6.0
1    3.0
2    3.0
3    8.0
4    7.0
..   ...
95   3.0
96   8.0
97   4.0
98   8.0
99   8.0

[100 rows x 1 columns]

进程已结束,退出代码0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值