2

2 つの列として日付と時刻のスタンプを含む csv ファイルがあります。パンダread_csvを使用してコンテンツをデータフレームに読み込みます。私の最終的な目標は、データから時系列グラフをプロットすることです。

!head vmstat.csv
wait_proc,sleep_proc,swapped_memory,free_memory,buffered_memory,cached_memory,swapped_in,swapped_out,received_block,sent_block,interrups,context_switches,user_time,sys_time,idle_time,wait_io_time,stolen_time,date,time
0,0,10896,3776872,380028,10284052,0,0,6,16,7716,4755,3,1,96,0,0,2012-11-01,08:59:27
0,0,10896,3776500,380028,10284208,0,0,0,40,7471,4620,0,0,99,0,0,2012-11-01,08:59:32
0,0,10896,3749840,380028,10286864,0,0,339,19,7479,4704,20,2,77,1,0,2012-11-01,08:59:37
0,0,10896,3747536,380028,10286964,0,0,17,118,7488,4638,0,0,99,0,0,2012-11-01,08:59:42
0,0,10896,3747452,380028,10287148,0,0,0,24,7489,4676,0,0,99,0,0,2012-11-01,08:59:47


df = read_csv("vmstat.csv", parse_dates=[['date','time']])
f = DataFrame(df, columns=[ 'date_time',  'user_time', 'sys_time', 'wait_io_time'])

In [3]: f
Out[3]:
date_time               user_time  sys_time     wait_io_time
0  2012-11-01 08:59:27          3         1             0
1  2012-11-01 08:59:32          0         0             0
2  2012-11-01 08:59:37         20         2             1
3  2012-11-01 08:59:42          0         0             0
4  2012-11-01 08:59:47          0         0             0

これまでのところ、データを正しく読み取ることができdate_time、DataFrame に結合されています。date_timefromdfをインデックスとして使用しようとすると問題が発生します。指定index = df.date_timeすると、すべてのNaN値が得られます。

dindex = f['date_time']
print dindex
g = DataFrame(f, columns=[ 'user_time', 'sys_time', 'wait_io_time'], index=dindex)

In [7]: g
Out[7]:
0    2012-11-01 08:59:27
1    2012-11-01 08:59:32
2    2012-11-01 08:59:37
3    2012-11-01 08:59:42
4    2012-11-01 08:59:47
Name: date_time  <---- dindex
g:
                 user_time  sys_time  wait_io_time
date_time                                             
2012-11-01 08:59:27        NaN       NaN           NaN
2012-11-01 08:59:32        NaN       NaN           NaN
2012-11-01 08:59:37        NaN       NaN           NaN
2012-11-01 08:59:42        NaN       NaN           NaN
2012-11-01 08:59:47        NaN       NaN           NaN

ご覧のとおり、列の値はすべてNaNs として出力されています。f中間フレームのように正しい値を取得するにはどうすればよいですか?

4

2 に答える 2

3

使用したいset_index

df1 = df.set_index('date_time')

'date_time'新しい DataFrame のインデックスとして列を選択します。

.

注: DataFrame コンストラクターで発生している動作は、次のように示されています。

df = pd.DataFrame([[1,2],[3,4]])
df1 = pd.DataFrame(df, index=[1,2])

In [3]: df1
Out[3]: 
    0   1
1   3   4
2 NaN NaN
于 2012-12-20T19:28:52.350 に答える
0

次のコードで回避策を得ることができます。

    up = f.pivot_table('user_time', rows='date_time')
    sp = f.pivot_table('sys_time', rows='date_time')
    wp = f.pivot_table('wait_io_time', rows='date_time')
    u=pandas.DataFrame(up)
    u['sys_time']=sp
    u['wait_io_time']=wp
    my_colors = ["#FF6666", "#00CC33", "#44EEEE"] 
    print u

外:

                           user_time    sys_time  wait_io_time
    date_time                                          
    2012-11-01 08:59:27          3         1          0
    2012-11-01 08:59:32          0         0          0
    2012-11-01 08:59:37         20         2          1
    2012-11-01 08:59:42          0         0          0
    2012-11-01 08:59:47          0         0          0

これを達成するためのもっと簡単な方法があるはずですが、私はパンダのnewBです。

さらに、u.plot()関数は時系列グラフのプロットに失敗します。"AttributeError:'numpy.int64'オブジェクトには属性'ordinal'がありません"したがって、より良い解決策について他の人からの連絡を待っています。

于 2012-12-20T18:58:48.110 に答える