26

Dataframe は {'series_name':Series(data, index)} のマップを取ることを認識しています。ただし、マップが OrderedDict() であっても、そのマップは自動的に並べ替えられます。

順序が保持され、列名が series.name になるように Series(data, index, name=name) のリストを渡す簡単な方法はありますか? すべてのシリーズですべてのインデックスが同じ場合、簡単な方法はありますか?

私は通常、numpy column_stack の series.values を渡し、列名を指定するだけでこれを行います。ただし、これは見苦しく、この特定のケースでは、データは浮動小数点数ではなく文字列です。

4

7 に答える 7

38

使用できますpandas.concat

import pandas as pd
from pandas.util.testing import rands

data = [pd.Series([rands(4) for j in range(6)],
                  index=pd.date_range('1/1/2000', periods=6),
                  name='col'+str(i)) for i in range(4)]

df = pd.concat(data, axis=1, keys=[s.name for s in data])
print(df)

収量

            col0  col1  col2  col3
2000-01-01  GqcN  Lwlj  Km7b  XfaA
2000-01-02  lhNC  nlSm  jCYu  XLVb
2000-01-03  sSRz  PFby  C1o5  0BJe
2000-01-04  khZb  Ny9p  crUY  LNmc
2000-01-05  hmLp  4rVp  xF2P  OmD9
2000-01-06  giah  psQb  T5RJ  oLSh
于 2012-11-30T21:13:35.413 に答える
13
a = pd.Series(data=[1,2,3])
b = pd.Series(data=[4,5,6])
a.name = 'a'
b.name= 'b'

pd.DataFrame(zip(a,b), columns=[a.name, b.name])

または単にデータフレームを連結する

pd.concat([pd.DataFrame(a),pd.DataFrame(b)], axis=1)

In [53]: %timeit pd.DataFrame(zip(a,b), columns=[a.name, b.name])
1000 loops, best of 3: 362 us per loop

In [54]: %timeit pd.concat([pd.DataFrame(a),pd.DataFrame(b)], axis=1)
1000 loops, best of 3: 808 us per loop
于 2012-11-30T21:17:19.020 に答える
9

シリーズのリストを作成します。

import pandas as pd
import numpy as np

> series = [pd.Series(np.random.rand(3), name=c) for c in list('abcdefg')]

最初の方法 pd.DataFrame.from_items:

> pd.DataFrame.from_items([(s.name, s) for s in series])
          a         b         c         d         e         f         g
0  0.071094  0.077545  0.299540  0.377555  0.751840  0.879995  0.933399
1  0.538251  0.066780  0.415607  0.796059  0.718893  0.679950  0.502138
2  0.096001  0.680868  0.883778  0.210488  0.642578  0.023881  0.250317

2番目の方法 pd.concat:

> pd.concat(series, axis=1)
          a         b         c         d         e         f         g
0  0.071094  0.077545  0.299540  0.377555  0.751840  0.879995  0.933399
1  0.538251  0.066780  0.415607  0.796059  0.718893  0.679950  0.502138
2  0.096001  0.680868  0.883778  0.210488  0.642578  0.023881  0.250317
于 2016-06-17T21:33:42.563 に答える
6

Series のリストを渡してDataFrame転置するだけでもうまくいくようです。また、いずれかのシリーズから欠落しているインデックスも埋めます。

import pandas as pd
from pandas.util.testing import rands
data = [pd.Series([rands(4) for j in range(6)],
                  index=pd.date_range('1/1/2000', periods=6),
                  name='col'+str(i)) for i in range(4)]
df = pd.DataFrame(data).T
print(df)
于 2016-03-15T10:33:16.280 に答える
4

DataFrame.from_itemsこちらもチェック

于 2012-12-13T03:09:14.230 に答える