2017-11-09 3 views
1

나는 같은 dataframe 있습니다문자열은

인용문을

내가 뭘하고 싶은 2/3의의를 추출하는 것입니다
df 
Out[458]: 

    strings 
0 lui sau chun 
1 d1420152 
2 98764879333 
3 minglee  
4 g1927384 
5 hannah 

strings 열의 각 값에 대한 문자열입니다. 보시다시피, 각 문자열의 길이가 다르므로 슬라이스를 해제 할 2/3 위치도 달라집니다. 내 목표 출력은 다음과 같습니다

인용문

df 
Out[459]: 
    strings   substring 
0 lui sau chun  liu sau 
1 d1420152   d1420 
2 98764879333  98764879 
3 minglee   ming 
4 g1927384   g1927 
5 annah   hann 

을 해봤 :

x=(df['strings'].str.len()*2/3).apply(np.floor).astype(int) 
df['strings'].str.slice(0,x) 

을하지만 그냥 나에게 다음과 같은 출력했다 :

인용문을

Out[451]: 
0 NaN 
1 NaN 
2 NaN 
3 NaN 
4 NaN 
Name: strings, dtype: float64 

아무도 도와 줄 수 있습니까? 와 다음 apply

먼저 새 열을 만들고 :

print (df['strings'].apply(lambda x: x[:int(len(x)*2/3)])) 
0 lui sau 
1  d1420 
2  9876487 
3  ming 
4  g1927 
5  hann 
Name: strings, dtype: object 

또 다른 해결책은 :

+0

내 대답이 도움이 되었다면 [대답] (http://meta.stackexchange.com/a/5235/295067) 잊지 마세요 - 답장 옆에있는 체크 표시 ('✓')를 클릭하십시오. 회색으로 바뀌어 채워 넣었습니다. 고마워요. – jezrael

답변

1

더 나은이 카운트 lenSeries.apply를 사용하여 선택 색인에 의해 []입니다 주셔서 감사합니다 행별 처리를위한 axis=1 :

df['l'] =(df['strings'].str.len()*2/3).apply(np.floor).astype(int) 
print (df) 
     strings l 
0 lui sau chun 8 
1  d1420152 5 
2 98764879333 7 
3  minglee 4 
4  g1927384 5 
5  hannah 4 

print (df.apply(lambda x: x['strings'][0: x['l']], axis=1)) 
0 lui sau 
1  d1420 
2  9876487 
3  ming 
4  g1927 
5  hann 
dtype: object