如何获取Pandas DataFrame中的值索引?

时间:2016-07-26 02:15:13

标签: python numpy pandas

我确信必须有一个非常简单的解决方案来解决这个问题,但我找不到它(浏览以前提出的问题,我没有找到我想要的答案或者没有理解它)。

我有一个类似于此的数据框(只是更大,有更多的行和列):

      x   val1   val2   val3
0    0.0  10.0   NaN    NaN
1    0.5  10.5   NaN    NaN
2    1.0  11.0   NaN    NaN
3    1.5  11.5   NaN  11.60
4    2.0  12.0   NaN  12.08
5    2.5  12.5  12.2  12.56
6    3.0  13.0  19.8  13.04
7    3.5  13.5  13.3  13.52
8    4.0  14.0  19.8  14.00
9    4.5  14.5  14.4  14.48
10   5.0  15.0  19.8  14.96
11   5.5  15.5  15.5  15.44
12   6.0  16.0  19.8  15.92
13   6.5  16.5  16.6  16.40
14   7.0  17.0  19.8  18.00
15   7.5  17.5  17.7    NaN
16   8.0  18.0  19.8    NaN
17   8.5  18.5  18.8    NaN
18   9.0  19.0  19.8    NaN
19   9.5  19.5  19.9    NaN
20  10.0  20.0  19.8    NaN

在下一步中,我需要为每个值列计算导数dVal / dx(实际上我有超过3列,所以我需要在循环中有一个强大的解决方案,我可以' t每次手动选择行)。但由于某些列中的NaN值,我面临的问题是x和val的维度不同。我觉得克服这种情况的方法是只选择那些x为notnull的x区间。但我无法做到这一点。我可能犯了一些非常愚蠢的错误(我不是程序员而且我非常没有天赋,所以请耐心等待我:))。

到目前为止,这是代码(现在我想起来了,我可能只是留下一些旧代码而引入了一些错误,因为我已经搞砸了一段时间,尝试不同的东西):

import pandas as pd
import numpy as np

df = pd.read_csv('H:/DocumentsRedir/pokus/dataframe.csv', delimiter=',')

vals = list(df.columns.values)[1:]

for i in vals:
    V = np.asarray(pd.notnull(df[i]))

    mask = pd.notnull(df[i])
    X = np.asarray(df.loc[mask]['x'])

    derivative=np.diff(V)/np.diff(X)

但是我收到了这个错误:

ValueError: operands could not be broadcast together with shapes (20,) (15,) 

所以,显然,它并没有只选择notnull值......

我正在制作一个明显的错误,或者我应该采用不同的方法吗?谢谢!

(另一个不那么重要的问题:np.diff是在这里使用的正确功能还是我最好通过有限差分手动计算它?我没有找到非常有用的numpy文档。)

1 个答案:

答案 0 :(得分:3)

计算dVal / dX:

X

我们区分所有列(第一个除外),然后将lambda函数应用于每个列,并将其除以(read) 列中的差异。