2016-12-09 4 views
0

私は2列(時間と圧力)の​​データフレームを持っています。df.value.apply NaNを返します

timestep value 
    0 393 
    1 389 
    2 402 
    3 408 
    4 413 
    5 463 
    6 471 
    7 488 
    8 422 
    9 404 
    10 370 

私が最初に各圧力値の周波数を見つけ、それらを正常に動作しますdf['freq_rank']をランク付けする必要がありますが、私は間隔の違いを見つける&カウント値に対して列を比較することによって、データフレームを隠蔽しようとしていたとき、私は取得していますNaNはprint(x)が右出力を返し、print(df['freq'])がNaNを返す理由

import numpy as np 
import pandas as pd 
from matplotlib.pylab import * 
import re 
import pylab 
from pylab import * 
import datetime 
from scipy import stats 
import matplotlib.pyplot 

df = pd.read_csv('copy.csv') 
dataset = np.loadtxt(df, delimiter=";") 
df.columns = ["Timestamp", "Pressure"] 

## Timestep as int 
df = pd.DataFrame({'timestep':np.arange(3284), 'value': df.Pressure}) 

## Rank of the frequency of each value in the df 
vcs = {v: i for i, v in enumerate(df.value.value_counts().index)} 
df['freq_rank'] = df.value.apply(vcs.get) 
print(df.freq_rank) 


>>Output: 
>>0 131 
>>1 235 
>>2  99 
>>3  99 
>>4 101 
>>5 101 
>>6 131 
>>7  79 
>>8  79 



## Find most frequent value 
count = df['value'].value_counts().sort_values(ascending=[False]).nlargest(10).index.values[0] 

## Mask the DF by comparing the column against count value & find interval diff. 
x = df.loc[df['value'] == count, 'timestep'].diff() 
print(x) 

>>Output: 
>>50  1.0 
>>112  62.0 
>>215  103.0 
>>265  50.0 
>>276  11.0 
>>277  1.0 
>>278  1.0 
>>318  40.0 
>>366  48.0 
>>367  1.0 
>>368  1.0 
>>372  4.0 

df['freq'] = df.value.apply(x.get) 
print(df.freq) 

>>Output: 
>>0 NaN 
>>1 NaN 
>>2 NaN 
>>3 NaN 
>>4 NaN 
>>5 NaN 
>>6 NaN 
>>7 NaN 
>>8 NaN 

私は理解していない...結果。

私はあなただけちょうどあなたができる新しい列 df['freq']xをコピーしたい場合は、あなたの問題は、最後の文 df['freq'] = df.value.apply(x.get)

であると思い

+1

[mcve](http://stackoverflow.com/help/mcve)を作成できますか? [良い再現性のあるパンダの例を作成する方法]を参照してください。(http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) –

+0

さらに詳しい情報はありますか?私は私のデータフレームも含めました。 – joasa

答えて

1

df['freq'] = x

その後print(df.freq)はあなたを与えるだろうprint(x)と同じ結果になります。


更新: あなたの問題はなインデックスです。 dfには0〜10のインデックス値しかありません。xには50,112,215 ... が割り当てられます.dfに割り当てるときは、既存のインデックスを持つ値だけが追加されます。

+0

私はそれを試みました。 'df ['freq'] = x'を実行しても' print(df) 'や' print(df.freq) 'を試してもまだNaNの値が表示されます – joasa

+0

' print(x) 'とは何ですか? – wonderkid2

+0

あなたは質問 – joasa

関連する問題