【问题标题】:pandas, how to convert any columns which contain words into numbers (i,e, map them)?pandas,如何将任何包含单词的列转换为数字(即映射它们)?
【发布时间】:2019-07-29 13:35:41
【问题描述】:

我有一个数据框,其中包含公司名称、价格、买卖、数量等列。我想将任何包含字符串的列转换为数值。 IE。映射说买= 1,卖= 2等。理想情况下,我想创建一个函数来执行此操作。

我知道我可以使用:

df['company_value'] = df['company_name'].rank(method='dense', ascending=False).astype(int)

但是我如何创建一个函数来将包含字符串/单词的任何列映射到映射?

【问题讨论】:

  • 我们能否获得一个样本输入和输出数据,以便我们可以复制和解决这个问题?

标签: python-3.x pandas mapping


【解决方案1】:

使用EddyG的样本数据

df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])

你可以简单地使用

map_dict = dict(enumerate(df.G.unique()))

给你

{0: 'monday',
 1: 'tuesday',
 2: 'wednesday',
 3: 'thursday',
 4: 'friday',
 5: 'saturday',
 6: 'sunday'}

【讨论】:

    【解决方案2】:

    编辑:由以下 Josh Friedlander 的响应触发。我喜欢他的角度,但他的映射方式错误。使用这个想法:

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])
    
    def mapDFcol(df,colName):
    
        map_dict = dict([[j,i] for i,j in enumerate(df.loc[:,colName].unique())])
    
        df[colName+'map'] = [map_dict[i] for i in df.loc[:,colName] ]
    
    
        return df
    
    
    
    mapDFcol(df,'G')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多