检查列是否包含类型字符串(对象)

时间:2017-11-22 22:44:39

标签: python python-3.x pandas dataframe dataset

我有一个包含数千行和数百列的庞大数据集。其中一列包含字符串,因为我收到错误。我想找到这个字符串。我的所有列都应该是浮点值,但是其中一列在某处有str类型。

如何使用Pandas遍历特定列并仅打印str类型的行?我想知道字符串是什么,所以我可以将它们转换为数字等价物。

2 个答案:

答案 0 :(得分:3)

applymaptype

一起使用
df = pd.DataFrame({'C1': [1,2,3,'4'], 'C2': [10, 20, '3',40]})

df.applymap(type)==str
Out[73]: 
      C1     C2
0  False  False
1  False  False
2  False   True
3   True  False

在这里你知道了str单元格。 然后我们使用np.where找到它

np.where((df.applymap(type)==str))
Out[75]: (array([2, 3], dtype=int64), array([1, 0], dtype=int64))

答案 1 :(得分:2)

如果您的目标是将所有内容转换为数值,那么您可以使用此方法:

样本DF:

In [126]: df = pd.DataFrame(np.arange(15).reshape(5,3)).add_prefix('col')

In [127]: df.loc[0,'col0'] = 'XXX'

In [128]: df
Out[128]:
  col0  col1  col2
0  XXX     1     2
1    3     4     5
2    6     7     8
3    9    10    11
4   12    13    14

In [129]: df.dtypes
Out[129]:
col0    object
col1     int32
col2     int32
dtype: object

解决方案:

In [130]: df.loc[:, df.dtypes.eq('object')] = df.loc[:, df.dtypes.eq('object')].apply(pd.to_numeric, errors='coerce')

In [131]: df
Out[131]:
   col0  col1  col2
0   NaN     1     2
1   3.0     4     5
2   6.0     7     8
3   9.0    10    11
4  12.0    13    14

In [132]: df.dtypes
Out[132]:
col0    float64
col1      int32
col2      int32
dtype: object