2017-11-19 2 views
1

私は基本的にパンダで時系列型の多くのCSVファイルを連結しようとしていますが、私はそれを行う方法を知っていたと確信していました。私たちは、3つのCSVファイルを持っているパンダでCSVファイルを連結する

は、この単純な例を考えてみましょう

file1.csv =

Alfa, A1, A2, A3, A4 
Beta, B1, B2, B3, B4 
Gamma, C1, C2, C3, C4 

file2.csv =

Delta, D1, D2, D3, D4 
Epsilon, E1, E2, E3, E4 
Zeta, F1, F2, F3, F4 

file3.csv =

Eta, G1, G2, G3, G4 
Theta, H1, H2, H3, H4 
Iota, I1, I2, I3, I4 

第一のおもちゃコード:きれいではありません

[In]: 

import pandas as pd 
a = pd.read_csv("/Test/file1.csv", header=None) 
b = pd.read_csv("/Test/file2.csv", header=None) 
c = pd.read_csv("/Test/file3.csv", header=None) 
colnames = ["GREEK", "ROW1", "ROW2", "ROW3", "ROW4"] 
concatDf = pd.concat([a,b,c], axis=0) 
concatDf.columns = colnames 
print(concatDf) 

[Out]: 

    GREEK ROW1 ROW2 ROW3 ROW4 
0  Alfa A1 A2 A3 A4 
1  Beta B1 B2 B3 B4 
2 Gamma C1 C2 C3 C4 
0 Delta D1 D2 D3 D4 
1 Epsilon E1 E2 E3 E4 
2  Zeta F1 F2 F3 F4 
0  Eta G1 G2 G3 G4 
1 Theta H1 H2 H3 H4 
2  Iota I1 I2 I3 I4 

、行うことに仮定されるものを行います。 実際のCSVファイルの名前は非常に長く、ファイル数が多いので、私は少し簡単にする必要があると思っていました。したがって第二のおもちゃコード

[In]: 

import glob 
import pandas as pd 

allFiles = glob.glob("/Test/" + "*.csv") 
dfList = [] 
for filename in allaFiler: 
    df = pd.read_csv(filename) 
    dfList.append(df) 

concatDf = pd.concat(dfList, axis=0) 
print(concatDf) 

[Out]: 

    A1 A2 A3 A4 D1 D2 D3 D4 G1 G2 G3 G4 Alfa Delta Eta 
0 B1 B2 B3 B4 NaN NaN NaN NaN NaN NaN NaN NaN Beta  NaN NaN 
1 C1 C2 C3 C4 NaN NaN NaN NaN NaN NaN NaN NaN Gamma NaN NaN 
0 NaN NaN NaN NaN E1 E2 E3 E4 NaN NaN NaN NaN NaN Epsilon NaN 
1 NaN NaN NaN NaN F1 F2 F3 F4 NaN NaN NaN NaN NaN Zeta NaN 
0 NaN NaN NaN NaN NaN NaN NaN NaN H1 H2 H3 H4 NaN  NaN Theta 
1 NaN NaN NaN NaN NaN NaN NaN NaN I1 I2 I3 I4 NaN  NaN Iota 

file1.csv、file2.csv、およびfile3.csvテストマップ内のファイルのみです。 documentationを確認しましたが、説明が見つかりませんでした。次のように

私の質問は以下のとおりです。

  1. なぜコード2はコード1と同じ結果が得られていないのですか?私は明らかに何か非常に基本的なものが欠けているので、何が起こっているのか理解してください。
  2. コード2を作成するために必要な変更は、コード1と同じ結果をもたらしますか?

ありがとうございます!

+2

基本的な問題は、各CSVの行名が異なるため、連結時にインデックスが整列しないことです。最も簡単な修正は、 'dfList'に追加する前に、データフレーム列の名前を変更することです(' list( 'ABCD') ')。 –

+0

基本的に行の名前を統一するだけです。 – userjuicer

+1

はい、私はどのようにあなたを示す答えを書いています。 –

答えて

2

すべてのデータフレームの名前が異なるようです。これにより、連結中にpd.concatがデータフレームの位置を調整しなくなります。

解決策は、連結前にそれぞれの名前を一貫して指定することです。データフレームを読み込むときに列名を指定するには、namesパラメータを使用します。

dfList = [] 
for filename in allaFiler: 
    df = pd.read_csv(filename, header=None, names=list('ABCD')) 
    dfList.append(df) 
+0

ありがとうございました!チャームのように働いた!! – userjuicer

+1

@userjuicerあなたは大歓迎です。 –

+0

私はskiprows = 0またはアルファ行が含まれていないと思う。 – userjuicer

関連する問題