どの言語でもこのテクニックは必要となりますね。備忘録として記録しておきます。

【python】

パターン1・・・最初に行入りのdataframeを作って、ilocで代入。Rangeで行数指定。

df = pd.DataFrame(0, columns=['A','B'], index=range(100))
for i in range(100):
    df.iloc[i,0] = 1
    df.iloc[i,1] = 2

パターン2・・・最初に行なしのデータフレームを作って、seriesをdataframeにappendする方法

df = pd.DataFrame(columns=['A', 'B'])
for i in range(5):
    record = pd.DataFrame({"A": ["valueA"],
                           "B": ["ValueB"]})
    df = pd.concat([df, record], axis=0)

python3.9以下では以下の方法でもできた。

df = pd.DataFrame(columns=['A','B'] )
for i in range(5):
    record = pd.Series( [ “a value”,  “b value” ], index=df.columns)
    df = df.append(record)

python3.10から以下の警告がでるようになった。

<ipython-input-30-839db07c870a>:4: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.

おまけ:複数のリストからデータフレームを作る

list_a = [1,2,3]
list_b = [4,5,6]
pd.DataFrame({"A_col":list_a,"B_col":list_b})

A_colとB_colが列名のデータフレームができる。

【R】

パターン1

df = data.frame(matrix(ncol = 2, nrow = 0))
colnames(df) <- c("column1", "column2")

for(i in 1:10){
  df[i,1] <- i
  df[i,2] <- i
}

パターン2・・・列数をnで指定。

n <- 2
df <- data.frame(matrix(rep(NA, n), nrow=1))[numeric(0), ]
colnames(df) <- c("column1", "column2")

for(i in 1:5){
df [i,1] <- i
df [i,2] <- i
}

おまけ:複数のリストからデータフレームを作る

value <- c(5,6,4,6,8,2,3,1,7)
group <- c("a","a","a","b","b","b","c","c","c")
df <- tibble(value,group)

データフレームの構成リスト名が列名となる。dfは、value列とgroup列ができる。

【VBA】

Sub myfunction()

Dim Lastrow As Integer
Lastrow = Worksheets("Sheet1").Range("A1").End(xlDown).Row

Dim dataframe() As Variant
ReDim dataframe(1 To Lastrow) As Variant

For i = 1 To Lastrow
dataframe(i) = Worksheets("Sheet1").Cells(i, 1)
Next i

End Sub

Categories:

category