如何检查 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