在Python数据框中替换字符串

3

我有一个(7,11000)的数据框。在这些7列中,有些是字符串。 在第2列和第1000行的单元格中,有一个字符串“London”。我想把它改成“Paris”。 我该怎么做?我在网上搜索了很多,但找不到方法。我尝试了以下命令但没有一个成功:

df['column2'].replace('London','Paris')
df['column2'].str.replace('London','Paris')
re.sub('London','Paris',df['column2'])

我通常会收到这个错误:

TypeError: expected string or bytes-like object

请将 df.info() 的输出添加到此问题中。其次,描述数据框大小时,通常的模式是(行数,列数)。所以,你的数据框应该是(11000,7)。df['column2'] = df['column2'].replace(to_replace='London', value='Paris') 应该可以工作。 - Scott Boston
3个回答

3

如果您想替换单个行(您提到了第1000行),可以使用.loc来完成。如果您想替换所有出现的'London',您可以这样做:

import pandas as pd
df = pd.DataFrame({'country': ['New York', 'London'],})
df.country = df.country.str.replace('London', 'Paris')

或者,您可以编写自己的替换函数,然后使用.apply

def replace_country(string):
    if string == 'London':
        return 'Paris'
    return string

df.country = df.country.apply(replace_country)

第二种方法有些过头,但是它是一个很好的例子,更适用于更复杂的任务。

我没有使用RETURN :((( - CFD

0

替换前使用re检查非字符

import re
for r, map in re_map.items():
    df['column2'] = [re.sub(r, map, x) for x in df['column2']]


1
除非绝对必要,否则避免在数据框中使用 for 循环。这些操作非常缓慢。请改用内置函数。 - Mohit Motwani

0
这些都是很棒的答案,但许多都不是矢量化的,只是一次操作系列中的每个项目,而不是对整个系列进行操作。
一个非常可靠的过滤器和替换策略是创建一个掩码或子集True/False系列,然后使用该系列的loc来替换:
mask = df.country == 'London' 
df.loc[mask, 'country'] = 'Paris'

# On 10m records:
  # this method < 1 second 
  # @Charles method 1 < 10 seconds
  # @Charles method 2 < 3.5 seconds
  # @jose method didn't bother because it would be 30 seconds or more

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接