我知道有很多方法可以迭代数据框中的数据。 我从探测器,功率,频率,时间采集数据。时间和电源列的每一行都有值。对于每个频率段,频率随着时间而而变化。频率和占空比仅列在段开头的列中。低于它的样子。
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
语句执行此操作。
答案 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