问题

好日子,

我有一个数据帧,我想为该列隔离字符串的每一行的一部分.我遇到的问题是每一行都需要一个不同长度的子字符串,特别是我想将字符串保持在第一个发生之前."(一个时期)加上下两个字母.

例:

 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"] 
 

请查看我希望输出的代码.

我不想使用循环.

提前致谢.

  最佳答案

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('(.*\...)')))
 

  相同标签的其他问题

pythonstringpandasslice