【问题标题】:df.value.apply returns NaNdf.value.apply 返回 NaN
【发布时间】:2016-12-12 17:23:38
【问题描述】:

我有一个包含 2 列(时间和压力)的数据框。

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 结果..

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

我不明白为什么 print(x) 返回正确的输出而 print(df['freq']) 返回 NaN。

【问题讨论】:

标签: python pandas


【解决方案1】:

我认为你的问题在于最后一条语句df['freq'] = df.value.apply(x.get)

如果您只想将x 复制到新列df['freq'],您可以:

df['freq'] = x

然后print(df.freq) 将给您与print(x) 语句相同的结果。


更新: 你的问题是指标。 df 仅具有从 0-10 的索引值,而您的 x 具有 50、112、215... 分配给 df 时,仅添加具有现有索引的值。

【讨论】:

  • 我试过了。即使我这样做 df['freq'] = x,当我尝试 print(df)print(df.freq) 时,我仍然会看到 NaN 值
  • print(x) 带给你什么?
  • 你可以在问题中看到
  • 查看我的答案更新。我认为问题出在索引上。
  • 你是对的,这就是问题所在。但是我该如何解决呢?
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 2011-04-22
  • 2016-05-20
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多