【问题标题】:How to add a specific number of characters to the end of string in Pandas?如何在 Pandas 的字符串末尾添加特定数量的字符?
【发布时间】:2016-10-02 12:03:14
【问题描述】:

我在 Python 中使用 Pandas 库,并试图将包含文本的列的长度增加为相同的长度。我试图通过添加一个特定的字符(这通常是空格,在这个例子中我将使用“_”)来做到这一点,直到它达到该列的最大长度。

例如:

Col1_Before

A
B
A1R
B2
AABB4

Col1_After

A____
B____
A1R__
B2___
AABB4

到目前为止,我已经做到了这一点(以上表为例)。这是下一部分(也是我坚持的部分)。

df['Col1_Max'] = df.Col1.map(lambda x: len(x)).max()
df['Col1_Len'] = df.Col1.map(lambda x: len(x))
df['Difference_Len'] = df ['Col1_Max'] - df ['Col1_Len']

我可能还没有很好地解释自己,因为我还在学习。如果这令人困惑,请告诉我,我会澄清。

【问题讨论】:

    标签: python pandas dataframe string-length maxlength


    【解决方案1】:

    考虑pd.Seriess

    s = pd.Series(['A', 'B', 'A1R', 'B2', 'AABB4'])
    

    解决方案
    使用str.ljust

    m = s.str.len().max()
    s.str.ljust(m, '_')
    
    0    A____
    1    B____
    2    A1R__
    3    B2___
    4    AABB4
    dtype: object
    

    适合您的情况

    m = df.Col1.str.len().max()
    df.Col1 = df.Col1.ljust(m '_')
    

    【讨论】:

    • 我确实喜欢这个答案。我从未考虑过使用系列。我需要多次运行该过程,这使我倾向于另一种解决方案。
    • @user3601042 在 pandas 中,数据框中的每一列都是一个系列。 df.Col1 是一个系列。这适用于您的问题,例如:m = df.Col1.str.len().max() 然后df.Col1 = df.Col1.str.ljust(m, '_') 我不关心答案选择,但我关心您是否了解如何使用此答案。我会更新我的帖子。
    • 这确实很有意义。你的回答改变了我的思维方式。我明白每一列都是一个系列。但是,永远不要在上下文中解决问题以及如何使用它来构建此类问题的解决方案(我猜是自学的缺点)。答案的帮助比您可能意识到的要多。我很感激你的时间。谢谢。
    【解决方案2】:

    这不是最像熊猫的解决方案,但您可以尝试以下方法:

    col = np.array(["A", "B", "A1R", "B2", "AABB4"])
    data = pd.DataFrame(col, columns=["Before"])
    

    现在计算最大长度、单个长度列表和差异:

    max_ = data.Before.map(lambda x: len(x)).max()
    lengths_ = data.Before.map(lambda x: len(x))
    diffs_ = max_ - lengths_
    

    创建一个名为 After 的新列,添加下划线或任何其他字符:

    data["After"] = data["Before"] + ["_"*i for i in diffs_]
    

    这一切都给出了:

      Before  After
    0      A  A____
    1      B  B____
    2    A1R  A1R__
    3  AABB4  AABB4
    

    【讨论】:

      【解决方案3】:

      无需创建额外的列:

      In [63]: data
      Out[63]: 
          Col1
      0      A
      1      B
      2    A1R
      3     B2
      4  AABB4
      
      In [64]: max_length = data.Col1.map(len).max()
      
      In [65]: data.Col1 = data.Col1.apply(lambda x: x + '_'*(max_length - len(x)))
      
      In [66]: data
      Out[66]: 
          Col1
      0  A____
      1  B____
      2  A1R__
      3  B2___
      4  AABB4
      

      【讨论】:

      • 谢谢。将此添加为一次在多个列上运行的函数,它很有魅力。
      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      相关资源
      最近更新 更多