2017-10-06 2 views
1

데이터 프레임의 한 행에있는 모든 열에서 'Total'텍스트를 검색하려고합니다.팬더 DataFrame은 첫 번째 열만 반환합니다.

def f(row): 
    for i in range(0,len(row)) 
     if re.search('Total', row[i]) is None: 
      return False 
     else: 
      return True 

data['newColumn'] = data.apply(f, axis=1) 

함수 f가 데이터 프레임에서 행당 한 번 호출된다고 가정하는 것이 맞습니까?

len (행)이 정확한 양의 열을 실제로 반환하더라도 newColumn은 데이터 프레임의 첫 번째 열에서 총계 만 가져옵니다.

인쇄 (row [i])를 추가하면 올바른 값이 인쇄됩니다. 그러나 새 열의 할당은 Total이 첫 번째 열의 텍스트에있는 경우에만 True입니다. 또한 함수에 전달 된 행을 반복 할 수없는 것 같습니다. 시리즈 유형입니다.

답변

1

루프 내에서 두 경우에 대한 return 문이 있으므로 함수는 항상 첫 번째 열 다음에 반환됩니다.

대신을 시도해보십시오

import pandas as pd 
df = pd.DataFrame({"row_1": ["foo", "Total", "bar"], 
        "row_2": ["Total", "foo", "bar"]}) 
df["is_total_in_row"] = df.apply(
    lambda row : "Total" in list(row), axis=1) 
print(df) 

반환

 row_1 row_2 is_total_in_row 
0 foo Total    True 
1 Total foo    True 
2 bar bar   False 
1

빌린 샘플 데이터가 @Sumido에서 설정 :

In [43]: df['newColumn'] = df.select_dtypes(['object']).sum(1).str.contains('Total') 

In [44]: df 
Out[44]: 
    row_1 row_2 newColumn 
0 foo Total  True 
1 Total foo  True 
2 bar bar  False 

설명 :

In [50]: df.select_dtypes(['object']).sum(1) 
Out[50]: 
0 fooTotal 
1 Totalfoo 
2  barbar 
dtype: object 
관련 문제