我可以用数据帧一次替换一些值吗?

时间:2017-05-23 09:29:03

标签: python python-3.x pandas dataframe

现在我必须这样做:

df = pd.DataFrame({'column': ['A', 'B', 'C', 'D', 'E', 'F', 'G', '-']})
df['column'] = df['column'].str.replace('A', 'cat').replace('B', 'rabit').replace('C', 'octpath').replace('D', 'spider').replace('E', 'mammoth').replace('F', 'snake').replace('G', 'starfish')

但我认为这是漫长而难以理解的。 你知道一个简单的解决方案吗?

3 个答案:

答案 0 :(得分:3)

以下是使用pandas.Series.replace的另一种方法:

d = {'A':'cat','B':'rabit', 'C':'octpath','D':'spider','E':'mammoth','F':'snake','G':'starfish'}
df['column'] = df['column'].replace(d)

输出:

    column
0       cat
1     rabit
2   octpath
3    spider
4   mammoth
5     snake
6  starfish
7         -

答案 1 :(得分:2)

您可以定义替换值的dict并在dict中传递的列上调用map,以处理不存在的值,您可以传递param na_action='ignore',这将返回{{1或NaN如果您想保留现有值,则可以调用fillna并传递原始列:

None

答案 2 :(得分:1)

df = pd.DataFrame({'column': ['A', 'B', 'C', 'D', 'E', 'F', 'G', '-']})
mapper={'A':'cat','B':'rabit','C':'octpath','D':'spider','E':'mammoth'}
df['column']=df.column.apply(lambda x:mapper.get(x))
0        cat
1      rabit
2    octpath
3     spider
4    mammoth
5    None
6    None
7    None

如果您想设置默认值

 df['column']=df.column.apply(lambda x:mapper.get(x) if mapper.get(x) is not None else "pandas")

  df.column
  0        cat
  1      rabit
  2    octpath
  3     spider
  4    mammoth
  5     pandas
  6     pandas
  7     pandas

来自shibuya的贪心