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类型读取, 就不会自动舍去零了。
作者:复旦大学朱宇实验室













闽公网安备 35020302000061号