<
>

pandas 读写csv/excel的常见问题与应对

2020-06-28 15:10:58 来源:易采站长站 作者:易采站长站整理

首先导入pandas:

import pandas as pd

基本读取

s = pd.read_csv('1.csv')

这样就是将当前文件夹下的”1.csv”文件读取为DataFrame形式,存储到s中,非常方便。
excel的话同理

s = pd.read_excel('1.csv')

基本写入

s = pd.DataFrame(a)
s.to_csv('1.csv')

注意这是DataFrame类型的方法,如上,可将s保存为’1.csv’中。

编码错误
涉及中文的时候容易出现这样的错误:

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 0-1

或者

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1

这时候需要将代码改为:

s = pd.read_csv('1.csv', encoding = 'gbk')

这里只是用gbk举例,很多中文的乱码都是因为这个问题。 如果还不行的话可以试试其他的编码方式。

读取时的头和索引
对应于pandas的 column 和 index, 直接读取的话, 会默认将第一行数据读为头, 额外生成一列数据为索引, 与预期不符。

  s = pd.read_csv('1.csv', header = 0)

将参数header置为0, 那么读入时,则会默认将每列名为为 0, 1, 2, 3, 而不会把本该是数据的第一行作为头了。

s = pd.read_csv(‘1.csv’, index_col=0)

通过index_col, 可以指定用哪一列作为读取后DataFrame的索引, 如用0就是代表第一列。 

零的问题
当存储的数据中有0时,如‘000001’, 那么程序会默认为这就是‘1’, 结果就存成了1, 但事实上你要存的是字符串‘000001’,这就是存储csv时的丢零问题。 同理, ‘000001’ 也会被读成1 。

存储时不丢零

code = 't000001'
A = pd.DataFrame(code)
A.to_csv('1.csv')

在要存储的字符串前面加“t”, 就会使得整个字符串得以保存。

读取时不丢零

s = pd.read_csv('1.csv'  converters={'code': str})

指定参数converts, 可以让某一列代码如’code’ 按str类型读取, 就不会自动舍去零了。

作者:复旦大学朱宇实验室

暂时禁止评论

微信扫一扫

易采站长站微信账号