我相信这个问题肯定有一个非常简单的解决方案,但我无法找到它(并浏览以前提出的问题,我没有找到我想要的或不明白的答案)。如何获取Pandas DataFrame中的值的索引?
我有一个类似的数据帧(只是更大,还有更多的行和列):
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列以上,所以我需要在循环中有一个强大的解决方案,我不能每次手动选择行)。但是由于某些列的NaN值,我正面临着x和val不是同一维度的问题。我觉得解决这个问题的方法是只选择x的区间,其中val是notnull
。但我无法做到这一点。我可能犯了一些非常愚蠢的错误(我不是程序员,我非常无能,所以请耐心等待:))。
这是目前为止的代码(现在我想到了,我可能因为遗留了一些旧代码而导致了一些错误,因为我已经搞了一会儿,尝试了不同的事情):
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的文件非常有用吗?)。
好吧,现在我意识到了另一个问题。我可能需要做一些平滑处理(假设距离x的最初0.5米距离处的2米),衍生物的值就会在这个尺度上变得疯狂。我见过scipy函数filtfilt和黄油,但可能我没有正确使用它们......如何在此代码中实现它们?谢谢。 – durbachit
对不起,但你应该只问每个职位一个问题。尝试发布一个新问题。如果你愿意,你可以参考这个问题。 – Alexander
好的,完成了,谢谢。 – durbachit