2017-09-06 19 views
4

私は約50のExcelファイルを持っています&データフレームにインポートし、すべてのファイルを単一のデータフレームにマージします。 しかし、いくつかのファイルには4つの列があります。各ファイルは、異なる順序で異なる列として表示されます。すべてのファイルから列を一致させてPython 3.6のデータフレームに追加

合計の異なるカラム:5すなわちCOL1、COL2、COL3、COL4、

COL5私はインポートする方法を知っているが、問題に直面して追加しているとき。

スクリプト:

dfAll = pd.DataFrame(columns=['col1', 'col2', 'col3', 'col4', 'col5')] 
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e col1, col2, col5 
columnsOFdf = df.columns 
dfAll[columnsOFdf] = dfAll.append(df) 

が、その与えエラー "とValueError:列がキーと同じ長さでなければなりません"

私は、[ 'COL1' 'COL2'、 'C​​OL5' DFを追加したいです]データto dfAll ['col1'、 'col2'、 'col5']

この問題についてお手伝いしてください。

+2

サイズ5のデータフレームにサイズ3のデータフレームを追加しようとしていますが、これは型のないデータセットでは機能しません。 – Sentinel

+0

@Sentinel、回答ありがとうございます。 –

+0

私はdataFramesの観点からpythonを使う際にはあまり参考になりません。他のデータフレームを追加するよりも、必要な列のみを含む新しいデータフレームを作成する必要があります。 – Sentinel

答えて

2

連結は

dfs = [] 
files = [...] 
for file_name in files: 
    dfs.append(pd.read_excel(file_name, sheetname='data1')) 
df = pd.concat(dfs) 

df1 = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC')) 
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list('BCD')) 
>>> pd.concat([df1, df2]) 
      A   B   C   D 
0 -2.329280 0.644155 -0.835137  NaN 
1 0.666496 -1.299048 0.111579  NaN 
2 1.855494 -0.085850 -0.541890  NaN 
0  NaN -1.131514 1.023610 -0.514384 
1  NaN 0.670063 1.403143 -0.978611 
2  NaN -0.314741 -0.727200 -0.620511 

はまた、既存のものにデータフレームを追加するたびに、それはコピーを返すあなたの列に一致します。これはパフォーマンスを著しく低下させ、二次コピーと呼ばれます。すべてのデータフレームのリストを作成し、その結果を連結するのが最良です。

+0

ありがとうございます... –

1

一つの解決策は、あなたがExcelファイルから読み込むデータフレームに空の列を追加することです:

columns = ['col1', 'col2', 'col3', 'col4', 'col5'] 
dfAll = pd.DataFrame(columns=columns) 
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e    col1, col2, col5 
columnsOFdf = df.columns 
for column in columns: 
    if column not in columnsOFdf: 
     df[column] = [""] * df.shape[0] 
dfAll.append(df) 
+3

これは、余分な列に新しいデータが追加されました。たぶん空のスペースではなくプレースホルダーがいい考えです。しかし、データが必要ない場合は、新しいデータフレーム – Sentinel

+0

を作成することをお勧めします。@Sentinelは、これで動作します...ありがとう –

1

はこれを試してみてください。私はこのヘルプあなたを願っています

[dfAll.append(i) for i in df] 

+0

エラー:TypeError:非NDFrameオブジェクトを連結できません –

+0

タイプ(dfAll)>>、タイプ(df)>>

関連する問題