📦
JuliaのDataFrameはPythonより厳格だった
同じDataFrame
でも、JuliaはPythonよりも厳格で「インターフェースをキチンと決めてからデータを入れたりしてね」との作りになっていたため、ハマらない様にメモします。
df.py
# Pythonサンプルコード
import pandas as pd
# 空のDataFrame
df1 = pd.DataFrame()
# 2 x 2のDataFrame
df2 = pd.DataFrame([["AAA","BBB"],["123", "456"], columns=["A", "B"])
# サイズが異なるDataFrameを結合
df3 = pd.concat([df1, df2])
# -> 正常終了
# -> df2と同一のDataFrameが誕生
df.jl
# Juliaサンプルコード1
using DataFrames
# 空のDataFrame
df1 = DataFrame()
# 2 x 2のDataFrame
df2 = DataFrame(A=["AAA","BBB"], B=["123", "456"])
# サイズが異なるDataFrameを結合
df3 = vcat(df1, df2)
# -> 異常終了
# -> ArgumentError: column(s) A and B are missing from argument(s) 1
ちなみにJuliaは配列をパラメータにDataFrameにappendが出来るpush!
メソッドもありますが、ここもカラム数と配列長が異なるとエラーで落ちます。
push.jl
# Juliaサンプルコード2
using DataFrames
# 空のDataFrame
df1 = DataFrame()
# 2 x 2のDataFrame
df2 = DataFrame(A=["AAA","BBB"], B=["123", "456"])
# 追加する行レコード
newrecord = ["CCC", "789"]
# DataFrameへのappend
push!(df1, newrecord)
# -> 異常終了
# -> ArgumentError: Length of iterable does not match DataFrame column count.
push!(df2, newrecord)
# -> 正常終了
# -> 行追加が出来ている
どんなデータが来るかを事前に定めておいてねー、との仕様に仕上がっています。何となく、GolangでCSV取り込みの処理を書いた時にstructure
に事前に来るデータカラムを定義したことを思い出しました。
実際がどうか不明(調査をしていない)ですが、「どんなデータがを受け取るのか分からない」なんてことは止めよう、とのスタンスなのだと一旦は咀嚼しました。
という具合でPythonとは異なるため、Juliaでリライトする場合は注意しようと思った次第でしたー。
Discussion