Если у вас есть фрейм данных, скажем, 10 столбцов, и вы хотите поместить записи со значениями 3 NaN
в другой результирующий фрейм данных, как те, которые имеют 1 NaN
, вы можете сделать это следующим образом:
# evaluate the number of NaNs per row
num_counts=df.isna().sum('columns')
# group by this number and add the grouped
# dataframe to a dictionary
results= dict()
num_counts=df.isna().sum('columns')
for key, sub_df in df.groupby(num_counts):
results[key]= sub_df
После выполнения этого кода результаты содержат подмножества df
, где каждое подмножество содержит одинаковое количество NaN
с (то есть такое же количество не- NaN
с).
Если вы хотитечтобы записать результаты в файл Excel, вам нужно просто выполнить следующий код:
with pd.ExcelWriter('sorted_output.xlsx') as writer:
for key, sub_df in results.items():
# if you want to avoid the detour of using dicitonaries
# just replace the previous line by
# for key, sub_df in df.groupby(num_counts):
sub_df.to_excel(
writer,
sheet_name=f'missing {key}',
na_rep='',
inf_rep='inf',
float_format=None,
index=True,
index_label=True,
header=True)
Пример:
# create an example dataframe
df=pd.DataFrame(dict(a=[1, 2, 3, 4, 5, 6], b=list('abbcac')))
df.loc[[2, 4, 5], 'c']= list('xyz')
df.loc[[2, 3, 4], 'd']= list('vxw')
df.loc[[1, 2], 'e']= list('qw')
Это выглядит так:
Out[58]:
a b c d e
0 1 a NaN NaN NaN
1 2 b NaN NaN q
2 3 b x v w
3 4 c NaN x NaN
4 5 a y w NaN
5 6 c z NaN NaN
Если вы выполнили приведенный выше код для этого фрейма данных, вы получите словарь со следующим содержанием:
0: a b c d e
2 3 b x v w
1: a b c d e
4 5 a y w NaN
2: a b c d e
1 2 b NaN NaN q
3 4 c NaN x NaN
5 6 c z NaN NaN
3: a b c d e
0 1 a NaN NaN NaN
Ключами словаря являются число NaN
s в строке и значения:кадры данных, которые содержат только строки с таким числом NaN
с.