替换整个 DataFrame 中的字符串/值

Posted

技术标签:

【中文标题】替换整个 DataFrame 中的字符串/值【英文标题】:Replace string/value in entire DataFrame 【发布时间】:2013-06-13 02:22:38 【问题描述】:

我有一个非常大的数据集,我想用数字替换字符串。我想在不为数据集中的每个键(列)键入映射函数的情况下对数据集进行操作。 (类似于 fillna 方法,但将特定字符串替换为关联值)。 有没有办法做到这一点?

这是我的数据集的示例

data
   resp          A          B          C
0     1       poor       poor       good
1     2       good       poor       good
2     3  very good  very good  very good
3     4       bad        poor       bad 
4     5   very bad   very bad   very bad
5     6       poor       good   very bad
6     7       good       good       good
7     8  very good  very good  very good
8     9       bad        bad    very bad
9    10   very bad   very bad   very bad

想要的结果:

 data
   resp  A  B  C
0      1  3  3  4
1     2  4  3  4
2     3  5  5  5
3     4  2  3  2
4     5  1  1  1
5     6  3  4  1
6     7  4  4  4
7     8  5  5  5
8     9  2  2  1
9    10  1  1  1

非常差=1,差=2,差=3,好=4,非常好=5

//乔纳斯

【问题讨论】:

在更新的 pandas 版本中,有更多的性能替代品,包括 mappd.Categorical。见this answer。 【参考方案1】:

data = data.replace(['very bad', 'bad', 'poor', 'good', 'very good'], [1, 2, 3, 4, 5])

您必须说明结果的保存位置。如果您只说 data.replace(...),它只会在预览中显示为更改,而不是在可羡慕对象本身中显示。

【讨论】:

【参考方案2】:

考虑到data 是您的pandas DataFrame,您也可以使用:

data.replace('very bad': 1, 'bad': 2, 'poor': 3, 'good': 4, 'very good': 5, inplace=True)

【讨论】:

【参考方案3】:

使用replace

In [126]: df.replace(['very bad', 'bad', 'poor', 'good', 'very good'], 
                     [1, 2, 3, 4, 5]) 
Out[126]: 
      resp  A  B  C
   0     1  3  3  4
   1     2  4  3  4
   2     3  5  5  5
   3     4  2  3  2
   4     5  1  1  1
   5     6  3  4  1
   6     7  4  4  4
   7     8  5  5  5
   8     9  2  2  1
   9    10  1  1  1

【讨论】:

这在 0.20.1 中不起作用。新语法见pandas.pydata.org/pandas-docs/version/0.20/generated/…。 上面有一个小的变化应该可以工作 df.replace(['very bad', 'bad', 'poor', 'good', 'very good'], [1, 2, 3, 4, 5],就地=真)

以上是关于替换整个 DataFrame 中的字符串/值的主要内容,如果未能解决你的问题,请参考以下文章

用 DataFrame 中的 None/null 值替换空字符串

用值替换整个数据框中的字符串

如何替换整个数据库中的字符串(数据值)?

pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe)

如果字符串以某个字符开头,则替换它

使用 lambda 以字符串开头时替换 DataFrame 列中的值