Как проверить, содержит ли фрейм данных pandas только числовой столбец? - PullRequest
0 голосов
/ 29 января 2019

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

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Вы можете проверить, используя to_numeric и принудительные ошибки:

pd.to_numeric(df['column'], errors='coerce').notnull().all()

Для всех столбцов вы можете перебирать столбцы или просто использовать apply

df.apply(lambda s: pd.to_numeric(s, errors='coerce').notnull().all())

Например

df = pd.DataFrame({'col' : [1,2, 10, np.nan, 'a'], 
                   'col2': ['a', 10, 30, 40 ,50],
                   'col3': [1,2,3,4,5.0]})

Выходы

col     False
col2    False
col3     True
dtype: bool
0 голосов
/ 29 января 2019

Возвращается значение True, если все столбцы являются числовыми, в противном случае - значение False.

df.shape[1] == df.select_dtypes(include=np.number).shape[1]

Чтобы выбрать числовые столбцы:

new_df = df.select_dtypes(include=np.number)
0 голосов
/ 29 января 2019

Вы можете провести сравнение True / False, используя isnumeric()

Пример:

 >>> df
       A      B
0      1      1
1    NaN      6
2    NaN    NaN
3      2      2
4    NaN    NaN
5      4      4
6   some   some
7  value  other

Результаты:

>>> df.A.str.isnumeric()
0     True
1      NaN
2      NaN
3     True
4      NaN
5     True
6    False
7    False
Name: A, dtype: object

# df.B.str.isnumeric()

с методом apply(), который выглядитболее надежный, если вам нужно сравнение из угла в угол:

DataFrame, имеющий два разных столбца, один со смешанным типом, другой с номерами только для теста:

>>> df
       A   B
0      1   1
1    NaN   6
2    NaN  33
3      2   2
4    NaN  22
5      4   4
6   some  66
7  value  11

Результат:

>>> df.apply(lambda x: x.str.isnumeric())
       A     B
0   True  True
1    NaN  True
2    NaN  True
3   True  True
4    NaN  True
5   True  True
6  False  True
7  False  True
0 голосов
/ 29 января 2019

Допустим, у вас есть фрейм данных с именем df, если вы сделаете:

df.select_dtypes(include=["float", 'int'])

Это вернет все числовые столбцы, вы можете проверить, совпадает ли это с оригинальным df.

В противном случае вы также можете использовать параметр exclude:

df.select_dtypes(exclude=["float", 'int'])

и проверить, дает ли это пустой массив данных.

...