我知道有无数种方法来遍历数据帧中的数据。我正在从探测器,功率,频率,时间获取数据。时间和功率列在每一行中都有值。频率随时间变化,但是对于每个频率“段”,频率和占空比仅在段开头的列中列出。下面看起来像。
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
语句执行此操作。
您要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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句