【问题标题】:Pandas - substring each row with a different lengthPandas - 用不同的长度对每一行进行子串
【发布时间】:2019-12-04 12:31:58
【问题描述】:

早安,

我有一个数据框,我想在其中为该列的每一行隔离一部分字符串。我遇到的问题是每一行都需要有一个不同长度的子字符串,特别是我想只保留字符串直到第一次出现“。” (句号)加上接下来的两个字母

例子:

import pandas as pd

x = [ [ 34, 'Sydney.Au123XX'] ,
             [30, 'Delhi.As1q' ] ,
             [16, 'New York.US3qqa']]
x = pd.DataFrame(x)
x.columns = ["a", "b"]

#now I want to substring each row based on where "." occurs.
#I have tried the following:
y = x["b"].str.slice( stop = x["b"].str.find(".") + 2)
y = x["b"].str[0: x["b"].str.find(".")+ 2]

#desired output
desired = [[ 34, 'Sydney.Au'] ,
             [30, 'Delhi.As' ] ,
             [16, 'New York.US'] ]
desired  = pd.DataFrame(desired )
desired .columns = ["a", "b"] 

请查看我的代码以获得所需的输出。

我不想使用循环。

提前致谢。

【问题讨论】:

  • 为什么纽约有.之后的东西
  • @U10-转发。谢谢,我确实看到了您的答案,并且对于我的问题的第一个版本是正确的。请查看我的问题的更新。 str.split() 可以适用于我希望在“。”之后保留前两个字符的情况。也一样?
  • @U10-转发。我认为对于我修改后的问题,我可以保留 x['b'].str.split('.').str[1] 以保留“。”之后的前两个字母。有没有更好的办法?

标签: python string pandas slice


【解决方案1】:

IIUC 尝试:

x['b'] = x['b'].str.split('.').str[0]
print(x)

你也可以做一个单行:

print(x.assign(b=x['b'].str.split('.').str[0]))

他们都输出:

    a         b
0  34    Sydney
1  30     Delhi
2  16  New York

编辑:

做:

x['b'] = x['b'].str.extract('(.*\...)')
print(x)

或使用:

print(x.assign(b=x['b'].str.extract('(.*\...)')))

【讨论】:

    【解决方案2】:

    使用列表推导

    例如

    import pandas as pd
    
    x = [ [ 34, 'Sydney.Au123'] ,
                 [30, 'Delhi.As1' ] ,
                 [16, 'New York.US3']]
    
    data = [["{0}.{1}".format(i.split(".")[0],i.split(".")[1][0:2]) if isinstance(i,str) else i for i in y] for y in x ]
    df  = pd.DataFrame(data,columns=['a','b'])
    print(df)
    

    O/P:

        a            b
    0  34    Sydney.Au
    1  30     Delhi.As
    2  16  New York.US
    

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2018-05-13
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2022-11-10
      • 1970-01-01
      • 2020-04-05
      相关资源
      最近更新 更多