如何解决如何在python中检查df中所有列的dtypes是否相同?
我是 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,"b": [2.0,3.1,4.2],"c": [2,4,5]})
same_types = pd.DataFrame({"a": [1,5]})
same_types2 = pd.DataFrame({"a": ["A","E"],"b": ["A","E"]})
is_same(diff_types1)
# False
is_same(diff_types2)
# False
is_same(same_types1)
# True
is_same(same_types2)
# True
,
或者检查 where 是否大于 1 dtypes
:
df.dtypes.nunique()>1
如果您的 df 具有不同的 dtype,将返回 True
。
你可以使用
df.dtypes.drop_duplicates().shape[0]== 1
这是一个例子:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df['a'] = 1,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.2,"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
,
有很多方法可以解决这个问题。这是一种解决方案:
all(x == df.dtypes[0] for x in df.dtypes)
如果所有列的数据类型相同,则返回 true。
这个单行代码首先通过将 df.dtypes
中的所有条目与第一个元素的数据类型进行比较来创建一个布尔值列表。如果所有条目都为 all()
True
函数返回 true版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。