2017-09-19 5 views
0

簡単な説明のために私の要件は5列と3行に制限されています。私の列見出しが文字列に来ると、私の行は文字列になります。私はすべての行をデータフレームに追加したい。ここで私が試したものである不明な数の列からパンダデータフレームを作成する

import pandas as pd 

Column_Header = "Col1,Col2,Col3,Col4,Col5" # We have upto 500 columns 
df = pd.DataFrame(columns=Column_Header.split(",")) 


#we will get upto 100000 rows from a server response 
Row1 = "Val11,Val12,Val13,Val14,Val15" 
Row2 = "Val21,Val22,Val23,Val124,Val25" 
Row3 = "Val31,Val32,Val33,Val34,Val35" 
df_temp = pd.DataFrame(data = Row1.split(",") , columns = Column_Header.split(",")) 
pd.concat(df,df_temp) 
print(pd) 
+0

あなたが受信するたびに'df.loc [-1] = Row.split("、 ")'、次にインデックスを調整してください: 'df.index = df.index + 1' – Ian

+0

あなたの質問に答えたなら、回答を受け入れる](https://stackoverflow.com/help/someone-answers)。 –

答えて

1

最善かつ最速のは一度だけDataFrameコンストラクタをlist comprehensionことによって、すべてのデータのリストを作成して呼び出すです:

Column_Header = "Col1,Col2,Col3,Col4,Col5" 
Row1 = "Val11,Val12,Val13,Val14,Val15" 
Row2 = "Val21,Val22,Val23,Val124,Val25" 
Row3 = "Val31,Val32,Val33,Val34,Val35" 

rows = [Row1,Row2,Row3] 
L = [x.split(',') for x in rows] 

print (L) 
[['Val11', 'Val12', 'Val13', 'Val14', 'Val15'], 
['Val21', 'Val22', 'Val23', 'Val124', 'Val25'], 
['Val31', 'Val32', 'Val33', 'Val34', 'Val35']] 


df = pd.DataFrame(data = L , columns = Column_Header.split(",")) 
print (df) 
    Col1 Col2 Col3 Col4 Col5 
0 Val11 Val12 Val13 Val14 Val15 
1 Val21 Val22 Val23 Val124 Val25 
2 Val31 Val32 Val33 Val34 Val35 
1

これは実行可能なオプションがある場合、それはより簡単になりますすべてのデータをpd.read_csvにします。すべての文字列を1つの複数行の文字列に変換し、read_csvにバッファStringIOを渡します。

import io  
data = '\n'.join([Column_Header, Row1, Row2, Row3]) 
df = pd.read_csv(io.StringIO(data)) 
df 

    Col1 Col2 Col3 Col4 Col5 
0 Val11 Val12 Val13 Val14 Val15 
1 Val21 Val22 Val23 Val124 Val25 
2 Val31 Val32 Val33 Val34 Val35 

あなたはpython2.xにしている場合は、ioモジュールはcStringIOモジュールとして提供されていますので、あなたは、としてそれをインポートする必要があるだろう:

import cStringIO as io 
関連する問題