Python 如果数值数据类型列中的值为str,则打印索引和值

Python 如果数值数据类型列中的值为str,则打印索引和值,python,pandas,data-science,data-cleaning,data-munging,Python,Pandas,Data Science,Data Cleaning,Data Munging,我是数据科学的新手,目前正在进一步探索。我有超过600000列的数据集,我目前正在清理和检查它的不一致性或异常值。我遇到了一个问题,我不知道如何解决它。我心里有一些解决办法,但我不知道如何处理熊猫 我已将某些列的数据类型从object转换为int。我没有发现错误,并检查了它是否在int中,是否在int中。我检查了一列的值以检查实际数据。这涉及到年龄,我得到一个错误,说我的列有一个字符串。所以我用这个方法检查它: print('if the string in numeric column',np

我是数据科学的新手,目前正在进一步探索。我有超过600000列的数据集,我目前正在清理和检查它的不一致性或异常值。我遇到了一个问题,我不知道如何解决它。我心里有一些解决办法,但我不知道如何处理熊猫

我已将某些列的数据类型从object转换为int。我没有发现错误,并检查了它是否在int中,是否在int中。我检查了一列的值以检查实际数据。这涉及到年龄,我得到一个错误,说我的列有一个字符串。所以我用这个方法检查它:

print('if the string in numeric column',np.any([isinstance(val,str)for val in hemiscide_df['permitor Age']])

现在,我只想在这个字符串数据类型的列上打印所有索引及其值和类型

目前,我提出了一个很好的解决方案:

def check_type(homicide_df):
    for age in homicide_df['Perpetrator Age']:
        if type(age) is str:
            print(age, type(age))
check_type(homicide_df)
以下是我的一些问题:

  • 有没有办法做同样的事情
  • 如何将这些元素转换为int
  • 为什么列上的某些元素没有转换为int
  • 非常感谢您的帮助。非常感谢您可以使用:



    如果所有值都是数字,但所有
    类型
    都是
    str

    print ((homicide_df['Perpetrator Age'].apply(type)==str).all())
    True
    
    homicide_df = pd.DataFrame({'Perpetrator Age':['10', '15']})
    
    homicide_df['Perpetrator Age'] = homicide_df['Perpetrator Age'].astype(int)
    print (homicide_df)
    
       Perpetrator Age
    0               10
    1               15
    
    print (homicide_df['Perpetrator Age'].dtypes)
    int32
    
    但如果某些数字包含字符串:

    转换为
    int
    的解决方案,用它将非数值替换为
    NaN
    。然后有必要将
    NaN
    替换为一些数值,如
    0
    ,最后转换为
    int

    homicide_df = pd.DataFrame({'Perpetrator Age':[10, '15', 'aa']})
    
    homicide_df['Perpetrator Age']=pd.to_numeric(homicide_df['Perpetrator Age'], errors='coerce')
    print (homicide_df)
       Perpetrator Age
    0             10.0
    1             15.0
    2              NaN
    
    homicide_df['Perpetrator Age'] = homicide_df['Perpetrator Age'].fillna(0).astype(int)
    print (homicide_df)
       Perpetrator Age
    0               10
    1               15
    2                0
    

    print(age,type(age))
    NaN
    s?
    non-numeric
    s?@jezrael的输出是什么?所有这些都打印出来了,非常感谢!这解决了我的问题!每一步都检查了它。请问您是否知道为什么在我转换列时一些值没有转换为int?我使用了
    df['col1','col2']=df[['col1','col2']].应用(对于数值,错误='ignore')
    方法当我转换列时,我认为如果使用
    错误='ignore'
    它只转换数字和非数字不会改变。所以混合
    类型
    -字符串整数。我明白了。感谢你的洞察力。我认为60万是巨大的df,对于另一种数据操作,最好的方法是创建小数据样本,使用你的代码(易于验证的输出)然后将解决方案应用于大数据框架。祝你好运!非常感谢!这是我第一次使用这么多数据,所以我还在学习。我将研究从大量数据中获取样本数据的最佳方法。
    def check_type(homicide_df):
        return homicide_df.loc[homicide_df['Perpetrator Age'].apply(type)==str,'Perpetrator Age']
    
    print  (check_type(homicide_df))
    1    15
    2    aa
    Name: Perpetrator Age, dtype: object
    
    print ((homicide_df['Perpetrator Age'].apply(type)==str).all())
    True
    
    homicide_df = pd.DataFrame({'Perpetrator Age':['10', '15']})
    
    homicide_df['Perpetrator Age'] = homicide_df['Perpetrator Age'].astype(int)
    print (homicide_df)
    
       Perpetrator Age
    0               10
    1               15
    
    print (homicide_df['Perpetrator Age'].dtypes)
    int32
    
    homicide_df = pd.DataFrame({'Perpetrator Age':[10, '15', 'aa']})
    
    homicide_df['Perpetrator Age']=pd.to_numeric(homicide_df['Perpetrator Age'], errors='coerce')
    print (homicide_df)
       Perpetrator Age
    0             10.0
    1             15.0
    2              NaN
    
    homicide_df['Perpetrator Age'] = homicide_df['Perpetrator Age'].fillna(0).astype(int)
    print (homicide_df)
       Perpetrator Age
    0               10
    1               15
    2                0