86845


データフレームに関する作業をしていたら、  
FutureWarning: The frame.append method is deprecated and will be removed from
pandas in a future version. Use pandas.concat instead.  
というのがでたので、concatに変えた方がよいのかなと思っていますが、使い方が理解できませんでした。

［作業］  
２つのデータフレーム、df_bbase、df_newを用意します。前者は初期状態で値を持ちますが、後者は初期状態では空です。

[code]

    df_base
             ,   key1,   key2,   key3,   key4,   key5
        name1, data00, data01, data02, data03, data04, 
        name2, data10, data11, data12, data13, data14, 
        name3, data20, data21, data22, data23, data24, 
        name4, data30, data31, data32, data33, data34, 
        name5, data40, data41, data42, data43, data44, 
    
[/code]

から、条件に合ったものを抜き出して、例えば、

[code]

    df_new
             ,   key1,   key2,   key3,   key4,   key5
        name1, data00, data01, data02, data03, data04, 
        name2, data10, data11, data12, data13, data14, 
        name5, data40, data41, data42, data43, data44, 
    
[/code]

というものを作りたいと思っています。そこで、

[code]

    for index, item in df_base.iterrows():
        if r'keyword' in item['key2'][0]:     #完全一致ではない条件判定
            df_new = df_new.append(item)
    
[/code]

というようなことをやると、df_newのような結果が得られ、目的は達成できるのですが、エラーは出ないものの冒頭のようなメッセージが出てきます。それならばと思って

[code]

    for index, item in df_base.iterrows():
        if r'keyword' in item['key2'][0]:
            df_new = pd.concat([df_new, item])
    
[/code]

というふうにやると、上記、df_newのようにはならず、

[code]

    ,key1, key2, key5
    key1,,,data00
    key2,,,data01
    key5,,,data04
    key1,,,data10
    key2,,,data11
    key5,,,data14
    key1,,,data40
    key2,,,data41
    key5,,,data44
    
[/code]

という感じになってしまいます。

concatはどういう使い方をしたらよいですか？  
よろしくお願いいたします。


CC BY-SA 4.0
2022-03-16T01:10:21.733
86844
2022-03-16T15:30:45.100
43160
question
python pandas
concatの使い方について。（pandasのappendでやっている作業をconcatに置き換えたい）


> 例えば print(df_base ['keyword']) とをやると、
[code]

>             key2
>     name1 [DATA1]
>     name2 [DATA2]
>     name3 [DATA3]
>  
[/code]

>
> になっていて、それぞれがどうも要素数１のリスト形式になっているようなのです。
[code]

    import pandas as pd
    import io
    
    csv_data = '''
    ,key1,key2,key3,key4,key5
    name1,data00,keyword1,data02,data03,data04
    name2,data10,keyword2,data12,data13,data14
    name3,data20,data21,data22,data23,data24
    name4,data30,data31,data32,data33,data34
    name5,data40,keyword5,data42,data43,data44
    '''
    df_base = pd.read_csv(io.StringIO(csv_data), index_col=[0])
    
    #
    df_base = df_base.applymap(lambda x: [x])
    df_new = df_base[df_base['key2'].str[0].str.contains('keyword')]
    
    print('df_base:\n', df_base)
    print('\ndf_new:\n', df_new)
    
    #
    df_base:
               key1        key2      key3      key4      key5
    name1  [data00]  [keyword1]  [data02]  [data03]  [data04]
    name2  [data10]  [keyword2]  [data12]  [data13]  [data14]
    name3  [data20]    [data21]  [data22]  [data23]  [data24]
    name4  [data30]    [data31]  [data32]  [data33]  [data34]
    name5  [data40]  [keyword5]  [data42]  [data43]  [data44]
    
    df_new:
               key1        key2      key3      key4      key5
    name1  [data00]  [keyword1]  [data02]  [data03]  [data04]
    name2  [data10]  [keyword2]  [data12]  [data13]  [data14]
    name5  [data40]  [keyword5]  [data42]  [data43]  [data44]
    
[/code]


CC BY-SA 4.0
2022-03-16T01:44:41.823
86845
2022-03-16T15:30:45.100
2022-03-16T15:30:45.100
47127
47127
86844
answer