我目前正在处理一个大数据集(超过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.applymaptype一起使用,但在实际数据中,显然所有值都是字符串(如果dataframe是由read_csv创建的):

df = df.applymap(type)
print (df)
               A                B
1  <class 'str'>  <class 'float'>
2  <class 'int'>    <class 'str'>

在实际数据中,如果所有值都是字符串,并且需要字符串repr转换为数值,则可以使用to_numericerrors='coerce'来表示非数值到NaNs,使用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

10-06 06:22
查看更多