Панды: удалить все значения NaN во всех столбцах - PullRequest
0 голосов
/ 18 мая 2018

У меня есть фрейм данных со многими пустыми записями:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3         9          5       
4         NaN       NaN
5         NaN       NaN
6         4         NaN
7         6          7
8         10        NaN
12        NaN        1

Я хочу удалить все значения NaN во всех строках столбцов.Как вы могли видеть, каждый столбец имеет разное количество строк.Итак, я хочу получить что-то вроде этого:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3          9          5       
4          4          7
6          6          1
7         10          
8                 
12    

Я пытался

filtered_df = df.dropna(how='any')

Но он удаляет все записи в кадре данных.Как я могу это сделать?

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Вы можете попробовать это также

censos_data.dropna(subset=censos_data.columns,inplace=True)

0 голосов
/ 19 мая 2018

Вы также можете использовать pd.concat в списке серий.

Обратите внимание, что столбцы Col_2 и Col_3 неизбежно float из-за NaN элементов, если вы удалите dtype=objectкак вариант.

res = pd.concat([df[x].dropna().reset_index(drop=True) for x in df], axis=1)

print(res)

   Col_1  Col_2  Col_3
0     10    5.0    2.0
1     22    7.0    7.0
2      3    9.0    5.0
3      4    4.0    7.0
4      5    6.0    1.0
5      6   10.0    NaN
6      7    NaN    NaN
7      8    NaN    NaN
8     12    NaN    NaN
0 голосов
/ 19 мая 2018

Как вы могли видеть, каждый столбец имеет разное количество строк.

DataFrame - это табличная структура данных: вы можете искать индекс и столбец и находить значение,Если количество столбцов в столбцах различно, то индекс не имеет смысла и вводит в заблуждение.A dict может быть лучшей альтернативой:

{c: df[c].dropna().values for c in df.columns}

или

{c: list(df[c]) for c in df.columns}
0 голосов
/ 19 мая 2018

Использование функции Divakar justify -

df[:] = justify(df.values, invalid_val=np.nan, axis=0, side='up')
df = df.fillna('')

print(df)

   Col_1 Col_2 Col_3
0   10.0     5     2
1   22.0     7     7
2    3.0     9     5
3    4.0     4     7
4    5.0     6     1
5    6.0    10      
6    7.0            
7    8.0            
8   12.0            
...