【问题标题】:convert string into numeric data in the dataframe using python使用python将字符串转换为数据框中的数字数据
【发布时间】:2015-04-29 08:23:31
【问题描述】:

如果我们在数据框中有类似的字段

A12
A13
A13
A12
A14

我们需要把这个字符串转换成

A12   1
A13   2
A13   2
A12   1
A14   3

【问题讨论】:

  • 这是熊猫还是不是?
  • 这些数字从何而来?规则是什么?
  • 另外,这与 Windows Azure 或机器学习有什么关系?

标签: python azure python-3.x machine-learning dataframe


【解决方案1】:

试试这个:

arr=dataframe['old_col'].unique()
dataframe['new_col']=dataframe['old_col'].apply(lambda x: arr.index(x))

【讨论】:

    【解决方案2】:

    你可以使用字典

    counts = {}
    for s in strings:
        assigned_number = counts.get( s, len(counts) + 1 )
        counts[s] = assigned_number
    

    【讨论】:

    • 如果我理解正确,OP想枚举每个可能的字符串值,而不是计算它们
    • 是的,太快了。我认为我的更新答案更好。虽然,我多次分配 dict 值
    【解决方案3】:

    看起来 OP 想要从第二个数字中减去第一个数字并得到结果。你可以这样做:

    my_test = ['A12', 'A13', 'A13', 'A12', 'A14']
    
    def numberMyData(data):
        try:
            nums = re.match('\w(\d)(\d)', data).groups()
            nums = nums[1] - nums[0]
            return (data, nums)
        except:
            return (data, 0)
    
    my_new_data = list(map(numberMyData, my_test))
    

    然后你有一个列表,看起来像这样:

    [('A12', 1), ('A13', 2), ('A13', 2), ('A12', 1), ('A14', 3)]
    

    如果您想以问题中的格式打印,您可以使用以下内容:

    for data in my_new_data:
        print('   '.join([data[0], str(data[1])]))
    

    用 3 个空格连接数据。输出如下所示:

    A12   1
    A13   2
    A13   2
    A12   1
    A14   3
    

    【讨论】:

      【解决方案4】:

      我们假设您的数据框是“df”并且该字段的标题是“代码”。 您可以将其转换为数值:

      def convert_to_num(code):
          if code == 'A12':
              return 1
          elif code == 'A13':
              return 2
          else:
              return 3
      
      df['New_Code'] = df['Code'].apply(convert_to_num)
              
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-21
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        • 2020-10-28
        相关资源
        最近更新 更多