Pandas:如何识别具有dtype对象但具有混合类型项的列



在pandas数据帧中,dtype=object的列实际上可以包含混合类型的项,例如整数和字符串。

在本例中,列a是dtype对象,但第一项是字符串,而其他所有项都是int:

import numpy as np, pandas as pd
df=pd.DataFrame()
df['a']=np.arange(0,9)
df.iloc[0,0]='test'
print(df.dtypes)
print(type(df.iloc[0,0]))
print(type(df.iloc[1,0]))

我的问题是:有没有一种快速的方法来识别哪些dtype=object的列实际上包含了像上面这样的混合类型由于panda没有dtype=str,这一点还不明显。

然而,我遇到过这样的情况,在将一个大的csv文件导入panda时,我会收到这样的警告:

sys:1: DtypeWarning: Columns (15,16) have mixed types. Specify dtype option on import or set low_memory=False

有没有一种简单的方法可以复制它并显式列出混合类型的列?或者,我必须手动逐一检查它们,看看是否可以将它们转换为字符串,等等?

背景是我正在尝试使用dataframe.to_SQL和SQLAlchemy将数据帧导出到Microsoft SQL Server。我有

OverflowError: int too big to convert

但是我的数据帧不包含dtype-int-onlyobject和float64的列。我猜这是因为其中一个对象列必须同时包含字符串和整数。

设置

df = pd.DataFrame(np.ones((3, 3)), columns=list('WXY')).assign(Z='c')
df.iloc[0, 0] = 'a'
df.iloc[1, 2] = 'b'
df
W    X  Y  Z
0  a  1.0  1  c
1  1  1.0  b  c
2  1  1.0  1  c

解决方案
查找所有类型并计算每列的唯一类型数。

df.loc[:, df.applymap(type).nunique().gt(1)]
W  Y
0  a  1
1  1  b
2  1  1

最新更新