一定有一个简单的方法,但我错过了。首先,想象一下Excel中的情况:
现在,我想对pandas做同样的事情,问题是以下代码导致目标数组变为NaN:
import pandas as pd
import numpy as np
df_source = pd.DataFrame(np.random.normal(0,.05,10), index=range(10), columns=['A'])
df_target = pd.DataFrame(index = df_source.index)
df_target.loc[0,"A"] = 1000 # initialize target array to start at 1000
df_target["A"] = (1 + df_source) * df_target["A"].shift(1) # How to skip first row?
目标数组变为NaN,因为第一行试图引用“脱离dataframe”的值,所以整列返回NaN。
我意识到我可以用循环遍历行,跳过第一行,但是这非常慢,对于我将要执行的数据集或迭代的大小来说不实用。
必须有一种使用pandas/numpy数组函数的方法,但是告诉它跳过计算中的第一行。怎么做?我试过布尔索引,但没能成功,也许有办法告诉熊猫跳过NaN结果。。。但最好的方法似乎是一个限定符,上面写着“应用此代码,从第二行开始”
我错过了什么?
编辑:
看来我的问题比我意识到的还要严重。耶兹雷尔下面的回答解决了NA问题,但我想我对熊猫的逻辑感到困惑。我上面给出的代码不能工作,因为它不能按元素工作。例如,一个简单的例子:
seriesdf = pd.DataFrame(index = range(10))
seriesdf['A'] = 1
seriesdf['A'].ix[1:] = 1 + seriesdf['A'].shift(1)
给出结果
A
0 1
1 2
2 2
3 2
4 2
5 2
6 2
7 2
8 2
9 2
不像我想象的那样是递增的计数。所以问题是,在pandas数据帧上进行逐行计算的最有效方法是什么?在这个应用程序中,速度很重要,所以我不希望在行之间进行交互。
新的python程序员正在尝试解决这个问题。我很感激能给我展示如何学习/解决这些问题的答案。谢谢您!
我想我理解您的问题,在这些情况下,我通常会发现制作一个列表并将其附加到现有的数据帧更容易。当然,您可以先创建一个序列实例,然后进行计算。
IIRC,iloc在熊猫的未来构建中被弃用,取而代之的是ix
重新考虑问题后,可以在数据帧中使用lambda表达式作为元素
我正试图想办法使用for循环来解决这个问题,但无法找到从何处获取行号的方法。
希望这有帮助。
IIUC您可以跳过} :
df_source
列A
的第一行,方法是选择所有行而不首先选择^{或者你认为:
编辑:
也许你需要^{} :
相关问题 更多 >
编程相关推荐