替换整个 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 版本中,有更多的性能替代品,包括map
和 pd.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)