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

首先导入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类型读取, 就不会自动舍去零了。

猜你喜欢

转载自blog.csdn.net/weixin_39274659/article/details/105272443
今日推荐