#python #pandas #dataframe #user-defined-types
#python #панды #фрейм данных #определяемые пользователем типы
Вопрос:
Я новичок в Pandas, я хотел проверить, все ли столбцы df одинаковы или нет. Тем не менее, я пытался это сделать, но, хотя я получаю сообщение об ошибке
print(df.columns)
Index(['age', 'car', 'car_name'], dtype='object')
где age, car — это int, float, а car_name — объект
for i in df:
if df[i].dtypes == int or df[i].dtypes == float:
print('yes')
else:
print('no')
this gives:
yes
yes
no
но то, что я хочу, это дать в целом, например, если во всех столбцах есть int или float, он должен печатать yes, иначе no . (с помощью if else
условия)
исключенный вывод:
for i in df:
if all column of df == int or all column of df == float:
print('yes')
else:
print('no')
output: 'No'
Комментарии:
1. Как выглядит ожидаемый результат?
2.
df.dtypes.drop_duplicates().shape[0]== 1
Ответ №1:
Или, возможно, проверьте, больше ли где 1 dtypes
:
df.dtypes.nunique()>1
Вернется True
, если ваш df имеет разные dtypes.
Комментарии:
1. как получить dtype этого уникального типа?
Ответ №2:
def is_same(df):
# this method returns true if all types are same, else returns false
no_of_types = len(df.dtypes.unique())
is_same = no_of_types == 1
return is_same
diff_types1 = pd.DataFrame({"a": [1,2,3], "b": [2,3,4], "c": ["A", "C", "E"]})
diff_types2 = pd.DataFrame({"a": [1,2,3], "b": [2.0,3.1,4.2], "c": [2, 4, 5]})
same_types = pd.DataFrame({"a": [1,2,3], "b": [2,3,4], "c": [2, 4, 5]})
same_types2 = pd.DataFrame({"a": ["A", "C", "E"], "b": ["A", "C", "E"], "c": ["A", "C", "E"]})
is_same(diff_types1)
# False
is_same(diff_types2)
# False
is_same(same_types1)
# True
is_same(same_types2)
# True
Комментарии:
1. Я действительно хотел в условии if и else, возможно ли это? например, если столбцы df имеют значение int/float, то выведите ‘yes’
2. я добавил еще один ответ, который дает true или false, если все типы являются числовыми или нет
Ответ №3:
Вы можете использовать
df.dtypes.drop_duplicates().shape[0]== 1
Вот один из примеров:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df['a'] = 1, 2, 3
>>> df['b'] = 4, 5, 6
>>> df.dtypes.drop_duplicates().shape[0]== 1
True
>>> df['b'] = 0.1, 0.2, 0.3
>>> df.dtypes.drop_duplicates().shape[0]== 1
False
Ответ №4:
from pandas.api.types import is_numeric_dtype
def is_int_or_float(df):
# this method returns true if all types are numeric
is_numeric_types = sum([is_numeric_dtype(x) for x in df])
return is_numeric_types
diff_types1 = pd.DataFrame({"a": [1,2,3], "b": [2,3,4], "c": ["A", "C", "E"]})
diff_types2 = pd.DataFrame({"a": [1,2,3], "b": [2.0,3.1,4.2], "c": [2, 4, 5]})
same_types = pd.DataFrame({"a": [1,2.2,3], "b": [2,3,4], "c": [2, 4, 5]})
same_types2 = pd.DataFrame({"a": ["A", "C", "E"], "b": ["A", "C", "E"], "c": ["A", "C", "E"]})
print(is_same(diff_types1))
# False
print(is_same(diff_types2))
# False
print(is_same(same_types1))
# True
print(is_same(same_types2))
# True
Ответ №5:
Существует много подходов к решению этой проблемы. Вот одно из решений:
all(x == df.dtypes[0] for x in df.dtypes)
Возвращает true, если все столбцы имеют одинаковый тип данных.
Этот одиночный вкладыш сначала создает список логических значений, сравнивая все записи с df.dtypes
типом данных первого элемента. all()
Функция возвращает true, если все записи True