首页 > Python > Python将多个CSV文件导入熊猫并连接成一个数据帧

Python将多个CSV文件导入熊猫并连接成一个数据帧

上一篇 下一篇

我想将目录中的几个CSV文件读取到熊猫中,并将它们连接到一个大数据帧中。不过我没能弄清楚。这是我到目前为止所拥有的:

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 循环中得到一些帮助?

分割线

网友回答:

请参阅 pandas:IO 工具了解所有可用方法。.read_

如果所有 CSV 文件都具有相同的列,请尝试以下代码。

我添加了 ,以便在读取 CSV 文件的第一行后,可以将其指定为列名。header=0

import pandas as pd
import glob
import os

path = r'C:DRODCL_rawdata_files' # use your path
all_files = glob.glob(os.path.join(path , "/*.csv"))

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

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

或者,归因于 Sid 的评论。

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

df = pd.concat((pd.read_csv(f) for f in all_files), ignore_index=True)

  • 通常需要标识每个数据样本,这可以通过向数据帧添加新列来实现。
  • pathlib来自标准库将用于此示例。它将路径视为带有方法的对象,而不是要切片的字符串。

导入和设置

from pathlib import Path
import pandas as pd
import numpy as np

path = r'C:DRODCL_rawdata_files'  # or unix / linux / mac path

# Get the files from the path provided in the OP
files = Path(path).glob('*.csv')  # .rglob to get subdirectories

选项 1:

  • 添加具有文件名的新列
dfs = list()
for f in files:
    data = pd.read_csv(f)
    # .stem is method for pathlib objects to get the filename w/o the extension
    data['file'] = f.stem
    dfs.append(data)

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

选项 2:

  • 使用 添加具有通用名称的新列enumerate
dfs = list()
for i, f in enumerate(files):
    data = pd.read_csv(f)
    data['file'] = f'File {i}'
    dfs.append(data)

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

选项 3:

  • 使用列表推导式创建数据帧,然后用于添加新列。np.repeat
    • [f'S{i}' for i in range(len(dfs))]创建字符串列表以命名每个数据帧。
    • [len(df) for df in dfs]创建长度列表
  • 此选项的归属归于此绘图答案。
# Read the files into dataframes
dfs = [pd.read_csv(f) for f in files]

# Combine the list of dataframes
df = pd.concat(dfs, ignore_index=True)

# Add a new column
df['Source'] = np.repeat([f'S{i}' for i in range(len(dfs))], [len(df) for df in dfs])

选项 4:

  • 用于创建新列的一行,归因于 C8H10N4O2 中的注释.assign
df = pd.concat((pd.read_csv(f).assign(filename=f.stem) for f in files), ignore_index=True)

df = pd.concat((pd.read_csv(f).assign(Source=f'S{i}') for i, f in enumerate(files)), ignore_index=True)

分割线

网友回答:

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

分割线

网友回答:

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

模板简介:该模板名称为【Python将多个CSV文件导入熊猫并连接成一个数据帧】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 335次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-17
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
企业网站 html5 微信公众平台 微信素材 单页式简历模板 自适应 微信模板 微信文章 微信图片 响应式
您可能会喜欢的其他模板