>

데이터 프레임에서 첫 번째 열의 마지막 단어를 흘렸는 데 18 번째 인덱스까지만 실행하고 싶었습니다

[Basically iam Trying to the last word of the first column till the index where Sector is present in the second column in the attached Image][1]
   sec=18
 if df['Unnamed: 1'].str.contains('Sector').any():
                for sec, row in df.iterrows():
                    df['Top Holdings']= df['Top Holdings'].str.rsplit(' ',1).str[0]

Iterrows를 사용했지만 iterrows와 itertuples를 사용하여 마지막 단어 중 2 개가 삭제되었으며 18 번째 인덱스까지 실행되지 않습니다

반복을 시도하여 N 번째 색인까지 첫 번째 열의 마지막 단어를 제거하십시오. 해당 단어 중 2 개가 삭제되고 18 번째 행까지 반복되지 않습니다.


  • 답변 # 1

    먼저 DataFrame.isna 로 마스크를 만들 수 있습니다   DataFrame.loc 를 사용하십시오.  값 바꾸기 :

    df = pd.DataFrame({'Top Holdings':['aaa bb cc d'] * 11,
                       'Unnamed: 1':[np.nan] * 7 + ['s','d','f'] + [np.nan]})         
    print (df)
       Top Holdings Unnamed: 1
    0   aaa bb cc d        NaN
    1   aaa bb cc d        NaN
    2   aaa bb cc d        NaN
    3   aaa bb cc d        NaN
    4   aaa bb cc d        NaN
    5   aaa bb cc d        NaN
    6   aaa bb cc d        NaN
    7   aaa bb cc d          s
    8   aaa bb cc d          d
    9   aaa bb cc d          f
    10  aaa bb cc d        NaN
    mask = df['Unnamed: 1'].isna()
    df.loc[mask, 'Unnamed: 1']= df.loc[mask, 'Top Holdings'].str.rsplit(n=1).str[0]
    
    
    Series.fillna 와 다른 솔루션 :

    df['Unnamed: 1'] = df['Unnamed: 1'].fillna(df['Top Holdings'].str.rsplit(n=1).str[0])
    print (df)
       Top Holdings Unnamed: 1
    0   aaa bb cc d  aaa bb cc
    1   aaa bb cc d  aaa bb cc
    2   aaa bb cc d  aaa bb cc
    3   aaa bb cc d  aaa bb cc
    4   aaa bb cc d  aaa bb cc
    5   aaa bb cc d  aaa bb cc
    6   aaa bb cc d  aaa bb cc
    7   aaa bb cc d          s
    8   aaa bb cc d          d
    9   aaa bb cc d          f
    10  aaa bb cc d  aaa bb cc
    
    

  • 이전 c# - json URL에서 데이터 가져 오기 [Xamarin]
  • 다음 java - Spring Batch Application에서 모든 작업에 대해 동일한 청크 크기 유지