如何检查 df 中所有列的 dtype 在 python 中是否相同?
How to check the dtypes of all columns in a df are same or not in 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'
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
有很多方法可以解决这个问题。这是一种解决方案:
all(x == df.dtypes[0] for x in df.dtypes)
如果所有列都具有相同的数据类型,则 returns 为真。
这个单行代码首先通过将 df.dtypes
中的所有条目与第一个元素的数据类型进行比较来创建一个布尔值列表。如果所有条目都是 True
,则 all()
函数 returns 为真
或者检查是否多于 1 dtypes
:
df.dtypes.nunique()>1
将 return True
如果你的 df 有不同的数据类型。
您可以使用
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
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
我是 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'
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
有很多方法可以解决这个问题。这是一种解决方案:
all(x == df.dtypes[0] for x in df.dtypes)
如果所有列都具有相同的数据类型,则 returns 为真。
这个单行代码首先通过将 df.dtypes
中的所有条目与第一个元素的数据类型进行比较来创建一个布尔值列表。如果所有条目都是 True
all()
函数 returns 为真
或者检查是否多于 1 dtypes
:
df.dtypes.nunique()>1
将 return True
如果你的 df 有不同的数据类型。
您可以使用
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
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