75529


Pythonでpandasの練習をしています。CSVから `read_csv()`
でDataFrameを作成し、その特定の列に対して演算を行おうと思っています。例えばこんな感じです。

[code]

    　　A
    1  12A
    2  14A
    3  55B    
    4  99F
    
[/code]

A列に対して、ある処理 `func()` を行いその結果を新しい列として追加したいと思っています。どのように記載するのが良いのでしょうか？  
`pandas.DataFrame.append()` かなと思いながら、使い方がよくわかりませんでした。


CC BY-SA 4.0
2021-04-25T21:28:45.733
75500
2021-05-11T04:30:31.217
2021-05-11T04:30:31.217
3060
44556
question
python python3 pandas
pandasのDataFrameに対する演算


Seriesを操作する関数は複数ありますので、適切な関数を用いるのがよろしいかと存じます。  
下記はスタックオーバーフローに出てきた関数ごとの関連質問の例です。

[split](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.str.split.html)関連質問:
[データフレーム：特定の複数の文字で列を分割したい](https://ja.stackoverflow.com/q/41678)  
[map](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.map.html)関連質問:
[関数を適用したときにList化されないようにするには](https://ja.stackoverflow.com/q/68744)  
[extract](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.str.extract.html)関連質問:
[列データから正規表現で取り出したデータを、新しい列に書き込むには？](https://ja.stackoverflow.com/q/36217)

[code]

    import pandas as pd
    
    df = pd.DataFrame({'A': ["12A", "55B", "99F"],
                       'B': ["9:30", "14:00", "23:59"]})
    
    def func(value):
        # 16進数文字列を10進数に変換する
        return int(value, 16)
    
    # B列をsplitで":"ごとに分割する
    df_splitted = df['B'].str.split(":", expand = True)
    df_splitted.columns = ["hour", "minute"]
    print(df_splitted)
    
    # A列にmapでfunc関数を適用する
    df['map'] = df['A'].map(func)
    
    # B列にextractで正規表現を使って:以下を抽出する
    df['extract'] = df['B'].str.extract(r":(\d{1,2})$", expand = False)
    print(df)
    
[/code]


CC BY-SA 4.0
2021-04-27T05:54:20.643
75529
2021-04-27T05:54:20.643
9820
75500
answer


ある処理func()というのを仮定でランダムな数字を置いています．  
appendを使うのであれば，Listをdfに追加するといいと思います．

[code]

    df = pd.DataFrame({'A': ["12A", "55B", "99F"]})
    testList = []
    for i in range(len(df['A'])):
        testList.append(df['A'][i] + '%r'%(random.randrange(10)) )
    df['B'] = testList
    df
    
[/code]


CC BY-SA 4.0
2021-05-11T04:20:52.357
75777
2021-05-11T04:20:52.357
45231
75500
answer