迭代单列的变化

时间:2016-10-05 21:45:57

标签: python python-3.x numpy dataframe

我知道有很多方法可以迭代数据框中的数据。 我从探测器,功率,频率,时间采集数据。时间和电源列的每一行都有值。对于每个频率段,频率随着时间而变化。频率和占空比仅列在段开头的列中。低于它的样子。

time power frequency duty cycle
1.4  1.2   500.0     45.0
2.1  49.9  NaN       NaN
3.4  245.0 NaN       NaN
4.5  323.0 NaN       NaN
5.6  320.0 NaN       NaN
6.6  309.0 1000      45
7.6  306.0 NaN       NaN
8.7  305.0 NaN       NaN
9.7  304.0 NaN       NaN
10.8 300.0 NaN       NaN

使用:

InitFreqs = df['frequency']
InitDuty = df['dutycycle']
for i in np.arange(1, len(InitFreqs)):
    if np.isnan(InitFreqs[i]):
     InitFreqs[i] = InitFreqs[i - 1]
     InitDuty[i] = InitDuty[i - 1]

我得到了我想要的结果,如下所示:

time power frequency duty cycle
1.4  1.2   500.0     45.0
2.1  49.9  500.0     45.0
3.4  245.0 500.0     45.0
4.5  323.0 500.0     45.0
5.6  320.0 500.0     45.0
6.6  309.0 1000      45.0
7.6  306.0 1000      45.0
8.7  305.0 1000      45.0
9.7  304.0 1000      45.0
10.8 300.0 1000      45.0

此示例中的45可能也可能不会更改,后续值需要反映这一点。虽然这样做的工作非常缓慢且效率低下。我找到了如何使用其他内容或所有NaN替换列中的所有值但不完全符合我要求的示例。 我应该能够在整个列上对for i语句执行此操作。

1 个答案:

答案 0 :(得分:1)

您想要fillna

data = '''time power frequency duty_cycle
1.4  1.2   500.0     45.0 
2.1  49.9  NaN       NaN 
3.4  245.0 NaN       NaN 
4.5  323.0 NaN       NaN 
5.6  320.0 NaN       NaN 
6.6  309.0 1000      450 
7.6  306.0 NaN      NaN 
8.7  305.0 NaN      NaN 
9.7  304.0 NaN      NaN 
10.8 300.0 NaN      NaN'''

dd = [d.split() for d in data.split('\n')]
df = pd.DataFrame(dd[1:],columns=dd[0])
df.replace('NaN',np.nan,inplace=True)


df.fillna(method='ffill',axis=0)

time    power   frequency   duty_cycle
0   1.4     1.2     500.0   45.0
1   2.1     49.9    500.0   45.0
2   3.4     245.0   500.0   45.0
3   4.5     323.0   500.0   45.0
4   5.6     320.0   500.0   45.0
5   6.6     309.0   1000    450
6   7.6     306.0   1000    450
7   8.7     305.0   1000    450
8   9.7     304.0   1000    450
9   10.8    300.0   1000    450