我目前正在处理一个大数据集(超过100万行,1000列),其中的数据是不干净的-几乎每一列都包含一些丢失的值或一些自由文本替换,其中应该找到数字项。因此,调用pd.dataframe.dtypes会导致每个列都是“obj”类型,而实际上它们应该是字符串字段和浮点字段的混合。我正在寻找一种创建显示每个条目的数据类型的辅助数据帧的方法。例如,考虑以下数据帧:
A B
1 ab 1.0
2 2 cd
我想制作一些类似于
A B
1 str float
2 int str
或相应的熊猫类型。由于数据集的大小,我想避免多个for循环,主要寻找内置/矢量化的解决方案。
谢谢!
最佳答案
将DataFrame.applymap
与type
一起使用,但在实际数据中,显然所有值都是字符串(如果dataframe是由read_csv
创建的):
df = df.applymap(type)
print (df)
A B
1 <class 'str'> <class 'float'>
2 <class 'int'> <class 'str'>
在实际数据中,如果所有值都是字符串,并且需要字符串repr转换为数值,则可以使用
to_numeric
和errors='coerce'
来表示非数值到NaN
s,使用DataFrame.apply
来表示所有列:df = df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
print (df)
A B
1 NaN 1.0
2 2.0 NaN