2017-04-03 19 views
2

前にキーと値のペアパンダのデータフレーム

に次のパンダのデータフレームに変換するための最良の方法は何です:私ドンという

2017-11-01 10:20 name=apple qty=5 price=1 
2017-11-01 11:20 name=pear qty=2 price=1.5 
2017-11-01 13:20 name=banana qty=10 price=5 

注:後

datetime    name qty  price 
2017-11-01 10:20  apple 5  1 
2017-11-01 11:20  pear  2  1.5 
2017-11-01 13:20  banana 10  5 

は、私の出力にdatetimeキーが必要です。

答えて

2

は、あなたがto_dictを必要とするようだ:

d = df.drop('datetime', axis=1).to_dict(orient='records') 
print (d) 
[{'qty': 5, 'price': 1.0, 'name': 'apple'}, 
{'qty': 2, 'price': 1.5, 'name': 'pear'}, 
{'qty': 10, 'price': 5.0, 'name': 'banana'}] 

が、必要でない場合は、キーdatetime

d = df.set_index('datetime').to_dict(orient='index') 
print (d) 
{'2017-11-01 13:20': {'qty': 10, 'price': 5.0, 'name': 'banana'}, 
'2017-11-01 10:20': {'qty': 5, 'price': 1.0, 'name': 'apple'}, 
'2017-11-01 11:20': {'qty': 2, 'price': 1.5, 'name': 'pear'}} 

順序が重要な場合:

tuples = [tup for tup in df.set_index('datetime').itertuples()] 
print (tuples) 

[Pandas(Index='2017-11-01 10:20', name='apple', qty=5, price=1.0), 
Pandas(Index='2017-11-01 11:20', name='pear', qty=2, price=1.5), 
Pandas(Index='2017-11-01 13:20', name='banana', qty=10, price=5.0)] 

EDIT:

新しいDataFrameが列名で作成され、古い値が追加されました。最後の書き込みto_csv

df = df.set_index('datetime').astype(str) 
df1 = pd.DataFrame(np.tile(np.array(df.columns), len(df.index)).reshape(len(df.index), -1), 
        index=df.index, 
        columns=df.columns) + '=' 
df1 = df1.add(df) 
print (df1) 
         name  qty  price 
datetime           
2017-11-01 10:20 name=apple qty=5 price=1.0 
2017-11-01 11:20 name=pear qty=2 price=1.5 
2017-11-01 13:20 name=banana qty=10 price=5.0 

df1.to_csv('filename.csv', header=None) 

2017-11-01 10:20,name=apple,qty=5,price=1.0 
2017-11-01 11:20,name=pear,qty=2,price=1.5 
2017-11-01 13:20,name=banana,qty=10,price=5.0 
+0

2017-11-01 10:20 name = 'apple'、qty = '5'、price = '1.0' ..ファイルにダンプされたこの形式のデータは気にしません。 – Sun

+0

よろしくお願いします。 – jezrael

+0

編集した回答を確認してください。 – jezrael

3

あなたが出力として辞書に満足している場合、あなたは(read_clipboardによって日付のわずかな構文解析エラーで)あなたの例では

df.to_dict('index') 

を使用することができ、これは、その結果:

In [17]: df = pd.read_clipboard().reset_index(drop=True) 

In [18]: df.to_dict('index') 
Out[18]: 
{0: {'datetime': '10:20', 'name': 'apple', 'price': 1.0, 'qty': 5}, 
1: {'datetime': '11:20', 'name': 'pear', 'price': 1.5, 'qty': 2}, 
2: {'datetime': '13:20', 'name': 'banana', 'price': 5.0, 'qty': 10}} 
+0

あなたは 'pd.read_clipboard()'をあなた自身の上でスケッチした答えの一部として持っています。しかし、何よりも、タイムスタンプの最初の半分が失われているという点で、文字列としての出力にタイムコンポーネントのみを表示するという事実によって証明されている点では間違っています。 – piRSquared

+0

これはまさに 'read_clipboard'が行う構文解析エラーです。ただし、これは必要な動作を変更しません。 – languitar