Python 如果数值数据类型列中的值为str,则打印索引和值
我是数据科学的新手,目前正在进一步探索。我有超过600000列的数据集,我目前正在清理和检查它的不一致性或异常值。我遇到了一个问题,我不知道如何解决它。我心里有一些解决办法,但我不知道如何处理熊猫 我已将某些列的数据类型从object转换为int。我没有发现错误,并检查了它是否在int中,是否在int中。我检查了一列的值以检查实际数据。这涉及到年龄,我得到一个错误,说我的列有一个字符串。所以我用这个方法检查它: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
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)
以下是我的一些问题:
如果所有值都是数字,但所有
类型
都是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