检查列是不是包含类型字符串(对象)
Posted
技术标签:
【中文标题】检查列是不是包含类型字符串(对象)【英文标题】:Check if column contains type string (object)检查列是否包含类型字符串(对象) 【发布时间】:2018-05-06 19:11:43 【问题描述】:我有一个包含数千行和数百列的庞大数据集。其中一列包含一个字符串,因为我收到一个错误。我想找到这个字符串。我的所有列都应该是浮点值,但是其中一列的类型为 str
某处。
如何使用Pandas
遍历特定列并仅打印str
类型的行?我想找出字符串是什么,以便将它们转换为等效的数字。
【问题讨论】:
你也可以使用DataFrame.dtypes
【参考方案1】:
将applymap
与type
一起使用
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))
【讨论】:
你能帮我翻译一下那个输出吗? @Bolboa 第一个数组表示行索引,第二个表示列索引【参考方案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
【讨论】:
以上是关于检查列是不是包含类型字符串(对象)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 检查数据库视图中的所有列是不是有特定的字符串值