如何使用python-CSV或pandas模块水平组合多个CSV文件



你好我想通过从每个文件中添加一列(在这种情况下,列称为"网格"(,将许多CSV文件(总数将在120-150左右波动(水平组合为一个CSV文件。所有这些文件都有相同的列和行数(它们构造相同(,并存储在相同的目录中。我尝试过CSV模块和Panda。我不想定义所有120个文件。我需要一个脚本来自动完成。我被卡住了,我没有任何想法。。。

一些输入CSV文件(数据(和CSV文件(合并(,我想得到:https://www.dropbox.com/transfer/AAAAAHClI5b6TPzcmW2dmuUBaX9zoSKYD1ZrFV87cFQIn3PARD9oiXQ

当我使用CSV模块时,我的代码就是这样的:

import os
import glob
import csv
os.chdir('csv_files_direction')
extension = 'csv'
files = [i for i in glob.glob('*.{}'.format(extension))]
out_merg = ('merged_csv_file_direction')
with open(out_merg,'wt') as out:
writer = csv.writer(out)
for file in files:
with open(file) as csvfile:
data = csv.reader(csvfile, delimiter=';')
result = []
for row in data:
a = row[3] #column which I need
result.append(a)

使用此代码,我只接收来自最后一个CSV的值。剩下的不见了。因此,我希望从目录中的每个CSV文件中都有一个精确的列。

和熊猫:

import os
import glob
import pandas as pd
import csv
os.chdir('csv_files_direction')
extension = 'csv'
files = [i for i in glob.glob('*.{}'.format(extension))]
out_merg = ('merged_csv_file_direction')
in_names = [pd.read_csv(f, delimiter=';', usecols = ['grid']) for f in files]

使用Panda,我从所有CSV接收数据作为列表,可以使用例如in_names[1]进行导航。我承认这是我第一次尝试熊猫,我不知道下一步该怎么做。

我将非常感谢任何帮助!提前感谢,Mateusz

对于CSV的部分,我认为您需要另一个列表来定义循环外部。类似的东西

import os
import sys
dirname = os.path.dirname(os.path.realpath('__file__'))
import glob
import csv

extension = 'csv'
files = [i for i in glob.glob('*.{}'.format(extension))]
out_merg = ('merged_csv_file_direction')
result= []
with open(out_merg,'wt') as out:
writer = csv.writer(out)
for file in files:
with open(file) as csvfile:
data = csv.reader(csvfile, delimiter=';')
col = []
for row in data:
a = row[3] #column which I need
col.append(a)
result.append((col))

注意:我还更改了进入文件夹的方式。现在,您可以在包含两个文件夹(一个用于获取数据,另一个用于保存数据(的文件夹中直接运行文件

关于熊猫的部分您可以再次创建循环。这一次,您需要CONCAT使用in_names = [pd.read_csv(f, delimiter=';', usecols = ['grid']) for f in files]创建的数据帧我认为你可以使用

import os
import glob
import pandas as pd
import csv
os.chdir('csv_files_direction')
extension = 'csv'
files = [i for i in glob.glob('*.{}'.format(extension))]
out_merg = ('merged_csv_file_direction')
in_names = [pd.read_csv(f, delimiter=';', usecols = ['grid']) for f in files]
result = pd.concat(in_names)

告诉我它是否有效

最新更新