执行时忽略字符串列

Posted

技术标签:

【中文标题】执行时忽略字符串列【英文标题】:Ignore string columns while doing 【发布时间】:2017-11-22 04:39:22 【问题描述】:

我正在使用以下代码来规范化 pandas DataFrame:

df_norm = (df - df.mean()) / (df.max() - df.min())

当所有列都是数字时,这可以正常工作。但是,现在我在df 中有一些字符串列,并且上述规范化出现了错误。有没有办法只对数据框的数字列执行这种规范化(保持字符串列不变)?

【问题讨论】:

【参考方案1】:

您可以使用select_dtypes 来计算所需列的值:

df = pd.DataFrame('a': [1, 2, 3], 'b': ['a', 'b', 'c'], 'c': [4, 5, 6])

df

   a  b  c
0  1  a  4
1  2  b  5
2  3  c  6

df_num = df.select_dtypes(include='number')

df_num

   a  c
0  1  4
1  2  5
2  3  6

然后你可以将它们分配回原来的df

df_norm = (df_num - df_num.mean()) / (df_num.max() - df_num.min())


df[df_norm.columns] = df_norm

df

     a  b    c
0 -0.5  a -0.5
1  0.0  b  0.0
2  0.5  c  0.5

【讨论】:

在我写我的时候没有看到你的答案。必要时可以删除,不知道协议是什么。 查看我的答案并解决您答案中的一个缺陷。也就是说,您可以使用 np.number 覆盖所有数字类型。

以上是关于执行时忽略字符串列的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:比较两个不同表中没有主键的字符串列以查找匹配/不匹配的字符串

当字符串列内容长于已经存在的内容时,HDFStore.append(string, DataFrame) 失败

编写csv时避免拆分字符串列

带有字符串列的 SQL 之间的子句

Pandas分组时字符串列合并的方法

在 BigQuery 中使用所有字符串列的限制