【问题标题】:Convert string in 1d array to 2d array with each character as seperate element将一维数组中的字符串转换为二维数组,每个字符作为单独的元素
【发布时间】:2021-06-24 12:46:55
【问题描述】:

我有一个 pandas.core.series.Series 类型的数据,如下所示:

print(x)

0  'School'
1  'Boy'

我的目标是将其转换为(转换为 2d)之类的东西:

s1 = [ ['S']['c']['h']['o']['o']['l'],
       ['B']['o']['y']]

我尝试了各种类似 np.reshape() 的东西,但使用它们我只能做到:

[['School']
 ['Boy']]

我什至厌倦了for i in x: 然后转换为类型列表,然后np.reshape(len(i), 1) 将每个字符串转换为二维数组。但我无法将其转换为“s1”中的形式。

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    通过map() 尝试并列出理解:

    x=x.map(lambda x:[[y] for y in list(x)]).astype(str).str.replace(', ','')
    

    x的输出:

    0    [['S']['c']['h']['o']['o']['l']]
    1                   [['B']['o']['y']]
    dtype: object
    

    【讨论】:

    • 请解释一下这个语句的作用。特别是“astype(str).str.replace(', ','')”部分代码。
    • @AvijitSingh x.map(lambda x:[[y] for y in list(x)]) 部分为我们提供了与其他答案一样的列表列表,然后我们通过astype() 方法将它们转换为字符串,最后将', ' 替换为'' 空字符
    【解决方案2】:

    目前我能找到的最好的

    >>> df[0].str.extractall(r"(\w)").apply(list, axis=1).unstack().agg(lambda x: [i for i in x if pd.notnull(i)], axis=1)
    0    [[S], [c], [h], [o], [o], [l]]
    1                   [[B], [o], [y]]
    

    【讨论】:

      【解决方案3】:

      str 上调用 list 会将其拆分为一个字符列表:

      df = pd.DataFrame(data = ["School", "Boy"])
      df[0] = df[0].map(lambda x : [list(char) for char in list(x)])
      

      现在,df

                                      0
      0  [[S], [c], [h], [o], [o], [l]]
      1                 [[B], [o], [y]]
      

      如果您不想要数据框,而只想要问题中的list,您可以使用上述list(df[0]),或者

      df = pd.DataFrame(data = ["School", "Boy"])
      result = [[list(char) for char in list(x)] for x in df[0]]
      # [[['S'], ['c'], ['h'], ['o'], ['o'], ['l']], [['B'], ['o'], ['y']]]
      

      【讨论】:

        【解决方案4】:

        [['School']
         ['Boy']]
        

        ,基本解决方案:

        a = [['School'],['Boy']]
        empty_lists = [ [] for _ in range(len(a)) ]
        for i, word  in enumerate(a):
          for char in word[0]:
            empty_lists[i].append(char)
        print(empty_lists)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多