我是靠谱客的博主 危机鞋子,最近开发中收集的这篇文章主要介绍pythonpandas合并两个csv文件_python - 将多个csv文件导入pandas并连接成一个DataFrame...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python - 将多个csv文件导入pandas并连接成一个DataFrame

我想从目录中读取几个csv文件到pandas并将它们连接成一个大的DataFrame。 我虽然无法弄明白。 这是我到目前为止:

import glob

import pandas as pd

# get data file names

path =r'C:DRODCL_rawdata_files'

filenames = glob.glob(path + "/*.csv")

dfs = []

for filename in filenames:

dfs.append(pd.read_csv(filename))

# Concatenate all data into one DataFrame

big_frame = pd.concat(dfs, ignore_index=True)

我想在for循环中需要一些帮助???

8个解决方案

222 votes

如果您在所有csv文件中都有相同的列,则可以尝试以下代码。我已经添加了header=0,以便在读取csv之后可以将第一行指定为列名。

path =r'C:DRODCL_rawdata_files' # use your path

allFiles = glob.glob(path + "/*.csv")

list_ = []

for file_ in allFiles:

df = pd.read_csv(file_,index_col=None, header=0)

list_.append(df)

frame = pd.concat(list_, axis = 0, ignore_index = True)

Gaurav Singh answered 2019-03-06T11:43:31Z

181 votes

替代darindaCoder的答案:

path = r'C:DRODCL_rawdata_files' # use your path

all_files = glob.glob(os.path.join(path, "*.csv")) # advisable to use os.path.join as this makes concatenation OS independent

df_from_each_file = (pd.read_csv(f) for f in all_files)

concatenated_df = pd.concat(df_from_each_file, ignore_index=True)

# doesn't create a list, nor does it append to one

Sid answered 2019-03-06T11:44:02Z

24 votes

import glob, os

df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "my_files*.csv"))))

Jose Antonio Martin H answered 2019-03-06T11:44:22Z

12 votes

编辑:我google了我的方式[https://stackoverflow.com/a/21232849/186078。]然而,最近我发现使用numpy进行任何操作然后将其分配给数据帧而不是在迭代的基础上操纵数据帧本身更快,它似乎也适用于此解决方案。

我真诚地希望任何人都能在这个页面上考虑这种方法,但是不要将这段巨大的代码作为评论附加在一起并使其不那么易读。

您可以利用numpy来加速数据帧连接。

import os

import glob

import pandas as pd

import numpy as np

path = "my_dir_full_path"

allFiles = glob.glob(os.path.join(path,"*.csv"))

np_array_list = []

for file_ in allFiles:

df = pd.read_csv(file_,index_col=None, header=0)

np_array_list.append(df.as_matrix())

comb_np_array = np.vstack(np_array_list)

big_frame = pd.DataFrame(comb_np_array)

big_frame.columns = ["col1","col2"....]

时间统计:

total files :192

avg lines per file :8492

--approach 1 without numpy -- 8.248656988143921 seconds ---

total records old :1630571

--approach 2 with numpy -- 2.289292573928833 seconds ---

SKG answered 2019-03-06T11:45:17Z

8 votes

Dask库可以从多个文件中读取数据帧:

>>> import dask.dataframe as dd

>>> df = dd.read_csv('data*.csv')

(来源:[http://dask.pydata.org/en/latest/examples/dataframe-csv.html)]

Dask数据帧实现了Pandas数据帧API的子集。 如果所有数据都适合内存,则可以调用df.compute()将数据帧转换为Pandas数据帧。

Jouni K. Seppänen answered 2019-03-06T11:46:08Z

6 votes

如果要以递归方式搜索(Python 3.5或更高版本),可以执行以下操作:

from glob import iglob

import pandas as pd

path = r'C:useryourpath***.csv'

all_rec = iglob(path, recursive=True)

dataframes = (pd.read_csv(f) for f in all_rec)

big_dataframe = pd.concat(dataframes, ignore_index=True)

请注意,最后三行可以用一行表示:

df = pd.concat((pd.read_csv(f) for f in iglob(path, recursive=True)), ignore_index=True)

你可以在这里找到**的文档。 此外,我使用iglob而不是glob,因为它返回迭代器而不是列表。

编辑:多平台递归函数:

您可以将上述内容包装到多平台功能(Linux,Windows,Mac)中,这样您就可以:

df = read_df_rec('C:useryourpath', *.csv)

这是功能:

from glob import iglob

from os.path import join

import pandas as pd

def read_df_rec(path, fn_regex=r'*.csv'):

return pd.concat((pd.read_csv(f) for f in iglob(

join(path, '**', fn_regex), recursive=True)), ignore_index=True)

toto_tico answered 2019-03-06T11:47:07Z

4 votes

如果多个csv文件是压缩的,您可以使用zipfile来读取所有文件并连接如下:

import zipfile

import numpy as np

import pandas as pd

ziptrain = zipfile.ZipFile('yourpath/yourfile.zip')

train=[]

for f in range(0,len(ziptrain.namelist())):

if (f == 0):

train = pd.read_csv(ziptrain.open(ziptrain.namelist()[f]))

else:

my_df = pd.read_csv(ziptrain.open(ziptrain.namelist()[f]))

train = (pd.DataFrame(np.concatenate((train,my_df),axis=0),

columns=list(my_df.columns.values)))

Nim J answered 2019-03-06T11:47:40Z

3 votes

filepaths = ['data/d1.csv', 'data/d2.csv','data/d3.csv','data/d4.csv']

df = pd.concat(map(pd.read_csv, filepaths))

robmsmt answered 2019-03-06T11:47:59Z

最后

以上就是危机鞋子为你收集整理的pythonpandas合并两个csv文件_python - 将多个csv文件导入pandas并连接成一个DataFrame...的全部内容,希望文章能够帮你解决pythonpandas合并两个csv文件_python - 将多个csv文件导入pandas并连接成一个DataFrame...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部