Перечислите столбцы в фрейме данных с пропущенными значениями как '?' - PullRequest
0 голосов
/ 17 ноября 2018

Перечислите имена столбцов столбца данных вместе с количеством пропущенных значений, если пропущенные значения закодированы с '?'используя панд и numpy.

import numpy as np

import pandas as pd

bridgeall = pd.read_excel('bridge.xlsx',sheet_name='Sheet1')
#print(bridgeall)


bridge_sep = bridgeall.iloc[:,0].str.split(',',-1,expand=True)
bridge_sep.columns = ['IDENTIF','RIVER', 'LOCATION', 'ERECTED', 'PURPOSE', 'LENGTH', 'LANES','CLEAR-G', 'T-OR-D',
                     'MATERIAL', 'SPAN', 'REL-L', 'TYPE']

print(bridge_sep)

Данные: я публикую фрагмент.На самом деле это [107 строк x 13 столбцов].

    IDENTIF RIVER LOCATION   ERECTED    ...    MATERIAL    SPAN REL-L      TYPE
0        E2     A       ?    CRAFTS    ...        WOOD   SHORT     ?     WOOD
1        E3     A       39    CRAFTS    ...        WOOD       ?     S      WOOD
2        E5     A       ?    CRAFTS    ...        WOOD   SHORT     S      WOOD

Требуется вывод:

LOCATION 2
SPAN 1
REL-L 1

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Сравните все значения с помощью eq (==) и для подсчета значений используйте sum - True s - процессы, подобные 1, затем удалите только False значения (0) на boolean indexing:

s = df.eq('?').sum()
s = s[s != 0]
print (s)
LOCATION    2
SPAN        1
REL-L       1
dtype: int64

Последний для DataFrame добавить reset_index:

df1 = s.reset_index()
df1.columns = ['names','count']
print (df1)
      names  count
0  LOCATION      2
1      SPAN      1
2     REL-L      1

РЕДАКТИРОВАТЬ:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,5)))
print (df)
   0  1  2  3  4
0  8  8  3  7  7
1  0  4  2  5  2
2  2  2  1  0  8
3  4  0  9  6  2
4  4  1  5  3  4

#compare with same length Series 
#same index values like index/columns of DataFrame
s = pd.Series(np.arange(5))
print (s)
0    0
1    1
2    2
3    3
4    4
dtype: int32

#compare columns
print (df.eq(s, axis=0))
       0      1      2      3      4
0  False  False  False  False  False
1  False  False  False  False  False
2   True   True  False  False  False
3  False  False  False  False  False
4   True  False  False  False   True

#compare rows
print (df.eq(s, axis=1))
       0      1      2      3      4
0  False  False  False  False  False
1   True  False   True  False  False
2  False  False  False  False  False
3  False  False  False  False  False
4  False   True  False   True   True
0 голосов
/ 17 ноября 2018

Если ваш DataFrame имеет имя df, попробуйте (df == '?').sum()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...