【问题标题】:Delimiter for Splitting each character of a string?分隔字符串的每个字符的分隔符?
【发布时间】:2023-02-25 08:46:58
【问题描述】:

我目前正在尝试将两个字符的字符串拆分为 pandas data.frame 中每个字符的两个单独的列,但我一直在努力寻找一种方法来对列执行操作,而不必遍历每一行。

我的起始 data.frame 看起来像这样:

  Initial
0      PT
1      XT
2      ZT

我希望将“初始”列拆分为包含每个字符的两个单独的列,如下所示:

  S1 S2
0  P  T
1  X  T
2  Z  T

我已经使用了 split() 函数,并且我试图找到一个合适的分隔符来提供它,它将拆分每个字符,但到目前为止我不知所措。有没有一种不需要遍历每一行就可以做到这一点的好方法?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    不确定 pandas,但 list(text) 将创建一个字符串中所有字符的列表

    然后您可以尝试在列表列表上创建数据框。

    【讨论】:

      【解决方案2】:

      你可以使用pandas.Series.str.extract来完成

      df[["S1", "S2"]] = df.Initial.str.extract(r"(.)(.)")
      df.drop("Initial", axis=1, inplace=True)
      print(df)
      

        S1 S2
      0  P  T
      1  X  T
      2  Z  T
      

      【讨论】:

        【解决方案3】:

        使用Series.str.slice

        df["S1"] = df["Initial"].str.slice(0, 1)
        df["S2"] = df["Initial"].str.slice(1, 2)
        

        这使:

          Initial S1 S2
        0      PT  P  T
        1      XT  X  T
        2      ZT  Z  T
        

        【讨论】:

          【解决方案4】:

          可以使用split,使用正则表达式来匹配两个字符(例如(?<=^.))和expand=True之间的位置:

          df[['S1', 'S2']] = df['Initial'].str.split(r'(?<=^.)', expand=True, regex=True)
          

          输出:

            Initial S1 S2
          0      PT  P  T
          1      XT  X  T
          2      ZT  Z  T
          

          如果不再需要,您可以在dropInitial列:

          df.drop('Initial', axis=1, inplace=True)
          

          输出:

            S1 S2
          0  P  T
          1  X  T
          2  Z  T
          

          【讨论】:

            猜你喜欢
            • 2013-05-22
            • 1970-01-01
            • 2014-02-10
            • 1970-01-01
            • 2017-05-17
            • 2013-04-18
            • 2020-08-13
            • 1970-01-01
            • 2022-11-20
            相关资源
            最近更新 更多