IIUC 당신은 사용할 수 있습니다
dataframe = pd.DataFrame({'field':['aasd|bbuu|cccc|ddde|e','ffff|gggg|hhhh|i|j','cccc|u|k'],
'G':[4,5,6]})
print (dataframe)
G field
0 4 aasd|bbuu|cccc|ddde|e
1 5 ffff|gggg|hhhh|i|j
2 6 cccc|u|k
print (dataframe.field.str.split('|', expand=True)
.stack()
.str[:2] #change to 29
.groupby(level=0)
.apply('|'.join))
0 aa|bb|cc|dd|e
1 ff|gg|hh|i|j
2 cc|u|k
dtype: object
또 다른 해결책을 지능형리스트를 통해 :
dataframe['new'] = pd.Series([[x[:2] for x in y] for y in dataframe.field.str.split('|')],
index=dataframe.index)
.apply('|'.join)
print (dataframe)
G field new
0 4 aasd|bbuu|cccc|ddde|e aa|bb|cc|dd|e
1 5 ffff|gggg|hhhh|i|j ff|gg|hh|i|j
2 6 cccc|u|k cc|u|k
dataframe = pd.DataFrame({'field':['aasd|bbuu|cc|ddde|e','ffff|gggg|hhhh|i|j','cccc|u|k'],
'G':[4,5,6]})
print (dataframe)
G field
0 4 aasd|bbuu|cc|ddde|e
1 5 ffff|gggg|hhhh|i|j
2 6 cccc|u|k
만약 필요 필터 이상 2
같은 값으로 모든 값 :
s = dataframe.field.str.split('|', expand=True).stack()
print (s)
0 0 aasd
1 bbuu
2 cc
3 ddde
4 e
1 0 ffff
1 gggg
2 hhhh
3 i
4 j
2 0 cccc
1 u
2 k
dtype: object
dataframe['new'] = s[s.str.len() < 3].groupby(level=0).apply('|'.join)
print (dataframe)
G field new
0 4 aasd|bbuu|cc|ddde|e cc|e
1 5 ffff|gggg|hhhh|i|j i|j
2 6 cccc|u|k u|k
,451,515,
또 다른 해결책은 : 언뜻보기에
dataframe['new'] = pd.Series([[x for x in y if len(x) < 3] for y in dataframe.field.str.split('|')],
index=dataframe.index)
.apply('|'.join)
print (dataframe)
G field new
0 4 aasd|bbuu|cc|ddde|e cc|e
1 5 ffff|gggg|hhhh|i|j i|j
2 6 cccc|u|k u|k
이것은 단지 데이터 구조의 오용처럼 날 것으로 보인다. 구분 기호로 구분 된 필드 목록 인 열을 사용하는 이유는 무엇입니까? 다른 컬럼은 무엇입니까? –
해당 열 또는 데이터 프레임의 예를 제공 할 수 있습니까? –
@ juanpa.arrivillaga 그게 데이터가 CSV에서 나에게 오는 방식입니다. 다른 열도 있지만 목록과 같은 구조를 가진 유일한 열입니다. 요점은 나에게 오는 원래 데이터에서 때로는 그 값 중 하나가 잘못되었다는 것입니다. 그리고 데이터 셋을 더 사용하기 전에 필터를 제거해야합니다. –