#python #pandas #dataframe #series
#python #pandas #фрейм данных #Серии
Вопрос:
Обычно, чтобы избежать SettingWithCopyWarning, я заменяю значения, используя .loc или .iloc, но это не работает, когда я хочу перенаправить заполнение моего столбца (от первого до последнего значения, отличного от nan). Вы знаете, почему это происходит и как это обойти?
Мой тестовый фрейм данных :
df3 = pd.DataFrame({'Timestamp':[11.1,11.2,11.3,11.4,11.5,11.6,11.7,11.8,11.9,12.0,12.10,12.2,12.3,12.4,12.5,12.6,12.7,12.8,12.9],
'test':[np.nan,np.nan,np.nan,2,22,8,np.nan,4,5,4,5,np.nan,-3,-54,-23,np.nan,89,np.nan,np.nan]})
и код, который выдает мне предупреждение :
df3['test'].iloc[df3['test'].first_valid_index():df3['test'].last_valid_index() 1] = df3['test'].iloc[df3['test'].first_valid_index():df3['test'].last_valid_index() 1].fillna(method="ffill")
Я бы хотел что-то подобное в конце :
Комментарии:
1. что вы пытаетесь сделать? вы используете iloc не лучшим образом
2. @sygneto я пытаюсь перенаправить заполнение моего столбца с первого на последнее значение, отличное от nan
3. как насчет первых 3 строк? оставьте это как nans или заполните наоборот? (принимать значение из 4-й строки)?
4. @sygneto это означает, что первый и последний nan-адреса остаются nan-адресами
Ответ №1:
Используйте first_valid_index
и last_valid_index
, чтобы определить диапазон, который вы хотите ffill
, а затем выберите диапазон вашего фрейма данных
df = pd.DataFrame({'Timestamp':[11.1,11.2,11.3,11.4,11.5,11.6,11.7,11.8,11.9,12.0,12.10,12.2,12.3,12.4,12.5,12.6,12.7,12.8,12.9],
'test':[np.nan,np.nan,np.nan,2,22,8,np.nan,4,5,4,5,np.nan,-3,-54,-23,np.nan,89,np.nan,np.nan]})
first=df['test'].first_valid_index()
last=df['test'].last_valid_index() 1
df['test']=df['test'][first:last].ffill()
print(df)
Timestamp test
0 11.1 NaN
1 11.2 NaN
2 11.3 NaN
3 11.4 2.0
4 11.5 22.0
5 11.6 8.0
6 11.7 8.0
7 11.8 4.0
8 11.9 5.0
9 12.0 4.0
10 12.1 5.0
11 12.2 5.0
12 12.3 -3.0
13 12.4 -54.0
14 12.5 -23.0
15 12.6 -23.0
16 12.7 89.0
17 12.8 NaN
18 12.9 NaN
Комментарии:
1. итак, вы хотите заполнять значения до тех пор, пока не будет существовать более 1 nan?
2. от первого допустимого индекса до последнего, проверьте документацию здесь pandas.pydata.org/pandas-docs/stable/reference/api/pandas . DataFrame.first_valid_index.html