2017-10-28 2 views
1

오류가있는 데이터 프레임이 있습니다. 예 :행을 왼쪽으로 이동하면서 특정 셀을 삭제합니다.

data1 data2 data3 
0 111  555 
1 222  666 
2 A  333  777 
3 444  888 

나는 동시에 왼쪽으로 2 행의 나머지는 모두 이동하면서 열 '데이터 1'에서 문자 'A'를 제거하고 싶습니다. 형식으로 결과를 얻으려면 :

data1 data2 data3 
0 111  555 
1 222  666 
2 333  777 
3 444  888 

어떻게 할 수 있습니까?

+1

귀하의 DF 직접 재현 할 수 없습니다. 이렇게하면 답을 얻을 기회가 최소화됩니다. – Kanak

+0

@ 카낙 내 문제는 문제의 작은 부분에 불과하므로 전체 코드를 던지지 않았습니다. 이것이 이론적 인 예를 들어 설명한 이유입니다. –

답변

4

여기가 해결책 중 하나입니다.

df=df.apply(pd.to_numeric,errors='coerce').\ 
    apply(lambda x: sorted(x, key=pd.isnull), 1).fillna('') 
df 
Out[931]: 
    data1 data2 data3 
0 111.0 555.0  
1 222.0 666.0  
2 333.0 777.0  
3 444.0 888.0  
+0

원칙적으로 잘못된 셀을 제외한 모든 셀은 숫자이므로 충분해야합니다. 나는 그것을 시험 할 것이다. 감사합니다 :) –

+0

@ TomaszPrzemski 내가 테스트 결과를 알리게 :-) – Wen

3
d = df.replace('A', np.nan) 
a = d.isnull().values.argsort(1) 

pd.DataFrame(
    d.values[np.arange(len(a))[:, None], a], 
    d.index, d.columns) 

    data1 data2 data3 
0 111 555 NaN 
1 222 666 NaN 
2 333 777 NaN 
3 444 888 NaN 
+0

이 솔루션은 특정 열의 표시와 함께 적용 할 수 있습니까? –

관련 문제