複数のCSVファイルをパンダにインポートし、1つのデータフレームに連結する 質問する

複数のCSVファイルをパンダにインポートし、1つのデータフレームに連結する 質問する

ディレクトリから複数の CSV ファイルを pandas に読み込み、それらを 1 つの大きな DataFrame に連結したいと考えています。しかし、まだ解決できていません。これまでのところ、次のことがわかっています。

import glob
import pandas as pd

# Get data file names
path = r'C:\DRO\DCL_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ループ内で何らかの助けが必要だと思いますか?

ベストアンサー1

見るpandas: IO ツール利用可能なすべての.read_メソッドについて。

すべての CSV ファイルに同じ列がある場合は、次のコードを試してください。

header=0CSV ファイルの最初の行を読み取った後、列名として割り当てることができるように、を追加しました。

import pandas as pd
import glob
import os

path = r'C:\DRO\DCL_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)

または、シド

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:\DRO\DCL_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:

  • ワンライナーの使用.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)

おすすめ記事