python 合并csv文件的问题:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xba in position 0、csv中文乱码

python 合并csv文件遇到的问题

  • 问题一:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 0: invalid start byte
  • 问题二:csv中文乱码
  • 最后附上csv文件合并的代码

问题一:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xba in position 0: invalid start byte

解决办法:
设置read_csv编码格式,添加 encoding=‘gbk’,或encoding=‘gb18030’

data = pd.read_csv(file,encoding='gbk')
data = pd.read_csv(file,encoding='gb18030')

问题二:csv中文乱码

合并csv文件后出现中文乱码,解决办法:
设置to_csv编码格式,由"utf_8" 改为 “utf_8_sig”

data.to_csv(file,encoding='utf_8_sig')

csv文件合并

步骤:
1、读取多个csv文件,合并至result.csv
2、删除重复的标题行,另存至result_new.csv

import glob
import pandas as pd
# 多个csv文件合并
def merge(csv_list,outputfile): # csv_list 存放所有csv文件路径的列表
    for i in csv_list:
        f = open(i,'rb')
        data = pd.read_csv(f,encoding='gbk')
        data.to_csv(outputfile,mode='a', encoding='utf_8_sig',index=False)
    print('完成合并')

# 标题去重
def distinct(file):
    df = pd.read_csv(file,header=None) # 第一行视为数据而不是标题
    datalist = df.drop_duplicates() # 删除重复行
    datalist.to_csv('D:/exercise_py/exercise01/files/result_new.csv',
                    encoding='utf_8_sig',index=False,header=False) # 去重后最终文件
    print('完成去重')

if __name__ == '__main__':
    csv_list = glob.glob('D:/exercise_py/exercise01/files/成交明细*.csv') # 合并前所有csv文件的路径
    print(csv_list)
    result_path = 'D:/exercise_py/exercise01/files/result.csv'  # 合并后文件路径
    merge(csv_list,result_path)
    distinct(result_path)

参考资料:python 合并多个csv文件

你可能感兴趣的:(python,数据分析,python,数据分析)