Python合并多个csv文件

系统 1866 0

导入所需的包

            
              
                import
              
               os

              
                import
              
               pandas 
              
                as
              
               pd

              
                import
              
               glob
            
          

合并多个csv文件

            
              csv_list = glob.glob(
              
                '*.csv'
              
              ) 
              
                #查看同文件夹下的csv文件数
              
              
print(
              
                u'共发现%s个CSV文件'
              
              % len(csv_list))
print(
              
                u'正在处理............'
              
              )

              
                for
              
               i 
              
                in
              
               csv_list: 
              
                #循环读取同文件夹下的csv文件
              
              
    fr = open(i,
              
                'rb'
              
              ).read()
    
              
                with
              
               open(
              
                'result.csv'
              
              ,
              
                'ab'
              
              ) 
              
                as
              
               f: 
              
                #将结果保存为result.csv
              
              
        f.write(fr)
print(
              
                u'合并完毕!'
              
              )
            
          
            
              共发现9个CSV文件
正在处理............
合并完毕!

            
          

去重函数

这个函数将重复的内容去掉,主要是去表头。

            
              df = pd.read_csv(
              
                "result.csv"
              
              ,header=
              
                0
              
              )
            
          
            
              df.info()
            
          
            
              
                
RangeIndex: 659867 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode    659867 non-null object
code              659867 non-null object
name              659867 non-null object
dtypes: object(3)
memory usage: 15.1+ MB

              
            
          
            
              IsDuplicated = df.duplicated()
            
          
            
              
                True
              
              
                in
              
               IsDuplicated
            
          
            
              True

            
          

这说明了这个DataFrame格式的数据含有重复项。

DataFrame.drop_duplicates函数的使用

            
              DataFrame.drop_duplicates(subset=
              
                None
              
              , keep=
              
                'first'
              
              , inplace=
              
                False
              
              )
            
          
  • subset : column label or sequence of labels, optional
    用来指定特定的列,默认所有列
  • keep : {‘first’, ‘last’, False}, default ‘first’
    删除重复项并保留第一次出现的项
  • inplace : boolean, default False
    是直接在原来数据上修改还是保留一个副本
            
              datalist = df.drop_duplicates(keep = 
              
                False
              
              )
            
          
            
              datalist.info()
            
          
            
              
                
Int64Index: 659859 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode    659859 non-null object
code              659859 non-null object
name              659859 non-null object
dtypes: object(3)
memory usage: 20.1+ MB

              
            
          

排序函数

            
              datalist_sorted = datalist.sort_values(by = [
              
                'code'
              
              ]) 
              
                #按1列进行升序排序
              
            
          

结果写入csv文件

            
              datalist_sorted.to_csv(
              
                "village_all.csv"
              
              , sep = 
              
                ','
              
              , header = 
              
                True
              
              ,index = 
              
                False
              
              )
            
          

问题

Python读取文件问题

错误信息

            
              
                "UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence"
              
            
          

解决方案

            
              fr = open(i,
              
                'r'
              
              ).read() 改为 fr = open(i,
              
                'rb'
              
              ).read()

              
                with
              
               open(
              
                'result.csv'
              
              ,
              
                'a'
              
              ) 
              
                as
              
               f: 改为 
              
                with
              
               open(
              
                'result.csv'
              
              ,
              
                'ab'
              
              ) 
              
                as
              
               f:
            
          

重复值问题

这里我合并了9个csv文件,检查最后合并结果发现,里面还有 一个列名 。这是因为9个为文件,其中8个的列名被认为是DataFrame的值,第1个的列名依旧为列名,然后再去重的过程中,8个相同值被保留了1个,所以这会导致最后的csv文件多了 一个列名

解决方案

            
              IsDuplicated = df.duplicated() 改为 IsDuplicated = df.duplicated(keep = 
              
                False
              
              ) 
              
                #重复数据全部去除
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论