在pandas数据框中,dtype = object的列实际上可以包含混合类型的项,例如整数和字符串。
在此示例中,列a是dtype对象,但第一项是字符串,而所有其他项都是int:
sys:1: DtypeWarning: Columns (15,16) have mixed types. Specify dtype option on import or set low_memory=False
我的问题是:是否有一种快速的方法来识别dtype = object包含哪些列,实际上是上面的混合类型?由于pandas没有dtype = str,这不是很明显。
但是,我遇到过将大型csv文件导入pandas的情况,我会收到如下警告:
OverflowError: int too big to convert
是否有一种简单的方法来复制它并明确列出混合类型的列?或者我是否需要手动逐个检查它们,看看我是否可以将它们转换为字符串等?
背景是我正在尝试使用DataFrame.to_sql和SQLAlchemy将数据框导出到Microsoft SQL Server。我得到了
{{1}}
但是我的数据帧不包含带有dtype int的列 - 只有object和float64。我猜这是因为其中一个对象列必须同时包含字符串和整数。
谢谢!
答案 0 :(得分:5)
设置
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