Python合并多个csv文件

导入所需的包

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()
<class 'pandas.core.frame.DataFrame'>
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()
<class 'pandas.core.frame.DataFrame'>
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) #重复数据全部去除
  • 30
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 可以使用 Python 的 pandas 库来合并多个 CSV 文件。首先,你需要安装 pandas: ``` pip install pandas ``` 然后,你可以使用 pandas 的 `read_csv()` 函数来读取 CSV 文件,并使用 `pandas.concat()` 函数将它们合并在一起。例如: ```python import pandas as pd # 将所有 CSV 文件读入到一个列表中 filenames = ['file1.csv', 'file2.csv', 'file3.csv'] dfs = [pd.read_csv(f) for f in filenames] # 合并所有文件 df = pd.concat(dfs) # 将合并后的数据保存到新的 CSV 文件df.to_csv('combined.csv', index=False, encoding='utf-8') ``` 在这段代码中,我们将所有 CSV 文件文件名存储在一个列表中,然后使用列表推导式将所有文件读入到一个列表中。接下来,我们调用 `pandas.concat()` 将所有文件合并在一起,最后使用 `to_csv()` 函数将合并后的数据保存到新的 CSV 文件中。 你也可以使用 `pd.concat()` 函数的 `ignore_index` 参数来忽略合并后的数据中的索引: ```python df = pd.concat(dfs, ignore_index=True) ``` 这样,合并后的数据中就不会包含原来每个 CSV 文件中的索引了。 ### 回答2: 在Python合并多个CSV文件可以使用`pandas`库来实现。具体步骤如下: 1. 导入`pandas`库: ```python import pandas as pd ``` 2. 创建一个空的DataFrame对象,用于存储合并后的数据: ```python merged_data = pd.DataFrame() ``` 3. 使用`pd.read_csv()`函数逐个读取CSV文件,并将读取的数据追加到DataFrame对象中: ```python file_list = ['file1.csv', 'file2.csv', 'file3.csv'] # CSV文件列表 for file in file_list: data = pd.read_csv(file) # 读取CSV文件 merged_data = pd.concat([merged_data, data], ignore_index=True) # 将数据追加到DataFrame对象中 ``` 4.将合并后的数据保存到一个新的CSV文件中: ```python merged_data.to_csv('merged_data.csv', index=False) ``` 以上就是Python合并多个CSV文件的基本步骤。通过使用`pandas`库的`read_csv()`函数读取CSV文件,并使用`concat()`函数将数据追加到一个空的DataFrame对象中,最后使用`to_csv()`函数将合并后的数据保存到一个新的CSV文件中。 ### 回答3: 需要合并多个CSV文件,可以使用Python的pandas库来实现。 首先要导入需要的库,包括pandas库和os库: import pandas as pd import os 创建一个空的DataFrame用于存储合并后的数据: all_data = pd.DataFrame() 使用os库的listdir函数列出指定目录下的所有CSV文件,并进行遍历: input_path = '指定目录路径' for file_name in os.listdir(input_path): if file_name.endswith(".csv"): file_path = os.path.join(input_path, file_name) #读取CSV文件内容 data = pd.read_csv(file_path) #将数据添加至all_data all_data = all_data.append(data) 将合并后的数据保存为一个新的CSV文件: all_data.to_csv("合并后的文件.csv", index=False) 这样就实现了多个CSV文件合并
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值