pandasのDataFrameで列を追加して、1行ずつ値を代入していく方法
サンプルコード
まずはサンプルコードになります。
下記が入力ファイル。
$ cat in.txt 20170101,38 20160202,28 20180303,10
下記がサンプルコードになります。
$ cat sample.py
#!/usr/bin/env python3
# coding: UTF-8
import pandas as pd
data = pd.read_csv('in.txt',
names=('Date', 'Value'),
index_col='Date',
parse_dates=True)
print("dataの中身を出力")
print (data)
print("")
print ("Addの列を追加")
data = data.assign(Add = 0)
print (data)
print("")
print("Addの列に1を代入")
for index, row in data.iterrows():
data['Add'][index] = 1
print(data)
下記が実行結果になります。
$ ./sample.py
dataの中身を出力
Value
Date
2017-01-01 38
2016-02-02 28
2018-03-03 10
Addの列を追加
Value Add
Date
2017-01-01 38 0
2016-02-02 28 0
2018-03-03 10 0
Addの列に1を代入
Value Add
Date
2017-01-01 38 1
2016-02-02 28 1
2018-03-03 10 1
下記にサンプルコードの解説をしたいと思います。
pandas.read_csv()でcsvデータを読み込み
まずは、pandas.read_csv()でcsvデータを読み込み、DataFrameを作成します。
data = pd.read_csv('in.txt',
names=('Date', 'Value'),
index_col='Date',
parse_dates=True)
print("dataの中身を出力")
print (data)
DataFrameの中身は下記になります。
dataの中身を出力
Value
Date
2017-01-01 38
2016-02-02 28
2018-03-03 10
DataFrame.assign()でDataFrameに列を追加
ここでは、列名がAddの列を、0で初期化して追加しています。
print ("Addの列を追加")
data = data.assign(Add = 0)
print (data)
DataFrameの中身は下記のようになります。
Addの列を追加
Value Add
Date
2017-01-01 38 0
2016-02-02 28 0
2018-03-03 10 0
for index, row in DataFrame.iterrows()の形式で1行ずつ参照
DataFrame.iterrows()とforループ処理を組み合わせて、indexと行を参照します。
そして、Addの列に1を代入しています。
print("Addの列に1を代入")
for index, row in data.iterrows():
data['Add'][index] = 1
print(data)
Addの列に1に置き換わっているのが確認できます。
Addの列に1を代入
Value Add
Date
2017-01-01 38 1
2016-02-02 28 1
2018-03-03 10 1
