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

Posted

技术标签:

【中文标题】检查列是不是包含类型字符串(对象)【英文标题】:Check if column contains type string (object)检查列是否包含类型字符串(对象) 【发布时间】:2018-05-06 19:11:43 【问题描述】:

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

如何使用Pandas 遍历特定列并仅打印str 类型的行?我想找出字符串是什么,以便将它们转换为等效的数字。

【问题讨论】:

你也可以使用DataFrame.dtypes 【参考方案1】:

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))

【讨论】:

你能帮我翻译一下那个输出吗? @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

【讨论】:

以上是关于检查列是不是包含类型字符串(对象)的主要内容,如果未能解决你的问题,请参考以下文章

检查包含 json 字符串的列是不是具有特定值

Oracle:检查数字列是不是包含格式化数字字符串中的值

SQL Server 检查数据库视图中的所有列是不是有特定的字符串值

如何检查字符串文字类型是不是包含 TypeScript 中的值?

在 C# 中检查对象是不是为数字

如何检查一个对象是不是至少包含一个键,其值包含 JavaScript 中的子字符串?