質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

Q&A

解決済

2回答

2024閲覧

JuliaでDataFrameにDataFrameRowをappendしたい

i113

総合スコア74

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

0グッド

0クリップ

投稿2022/03/17 09:19

Julia1.7.2で下記のようなデータフレーム(df1)を1行ずつ他のデータフレーム(df)に追加するプログラムを書きたいのですが上手くいきません。
df1.csv

col1col2col3col4col5
AX1050------
AX22------
AX806------
AX2109------
AY44------
BXnone------
BY690------

Julia1.7.2

1using CSV, DataFrames, DataFramesMeta 2 3df1 = CSV.read("C:/Users/user/df1.txt", DataFrame ;type=String, header=1) 4df = DataFrame(col1=String[],col2=String[],col3=String[],col4=String[],col5=String[]) 5for r in eachrow(df1) 6 append!(df,r) 7end 8println(df)

Tarminal

1ERROR: LoadError: ArgumentError: 'DataFrameRow{DataFrame, DataFrames.Index}' iterates 'String' values, which doesn't satisfy the Tables.jl `AbstractRow` interface 2Stacktrace: 3 [1] invalidtable(#unused#::DataFrameRow{DataFrame, DataFrames.Index}, #unused#::String) 4 @ Tables C:\Users\user\.julia\packages\Tables\PxO1m\src\tofromdatavalues.jl:42 5 [2] iterate 6 @ C:\Users\user\.julia\packages\Tables\PxO1m\src\tofromdatavalues.jl:48 [inlined] 7 [3] buildcolumns 8 @ C:\Users\user\.julia\packages\Tables\PxO1m\src\fallbacks.jl:197 [inlined] 9 [4] columns 10 @ C:\Users\user\.julia\packages\Tables\PxO1m\src\fallbacks.jl:260 [inlined] 11 [5] DataFrame(x::DataFrameRow{DataFrame, DataFrames.Index}; copycols::Bool) 12 @ DataFrames C:\Users\user\.julia\packages\DataFrames\MA4YO\src\other\tables.jl:58 13 [6] #append!#803 14 @ C:\Users\user\.julia\packages\DataFrames\MA4YO\src\other\tables.jl:69 [inlined] 15 [7] append!(df::DataFrame, table::DataFrameRow{DataFrame, DataFrames.Index}) 16 @ DataFrames C:\Users\user\.julia\packages\DataFrames\MA4YO\src\other\tables.jl:65 17 [8] top-level scope 18 @ c:\Users\user\OneDrive\Documents\sv_match.jl:16 19in expression starting at c:\Users\user\OneDrive\Documents\sv_match.jl:6

append!(df,r[1,!])
としても、
ERROR: LoadError: MethodError: no method matching getindex(::DataFrameRow{DataFrame, DataFrames.Index}, ::Int64, ::typeof(!))
となり上手くいきませんでした。どうすれば良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

julia

1for r in eachrow(df1) 2 #append!(df,r) 3 push!(df, r) 4end 5 6println(df) 7 8# 9 Row │ col1 col2 col3 col4 col5 10 │ String String String String String 11 ──┼──────────────────── 12 1 │ A X 1050 1 14 13 2 │ A X 22 2 13 14 3 │ A X 806 3 12 15 4 │ A X 2109 4 11 16 5 │ A Y 44 5 10 17 6 │ B X none 6 9 18 7 │ B Y 690 7 8

投稿2022/03/17 11:39

melian

総合スコア21109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

i113

2022/03/18 03:59

どうも有り難うございます。解決しました。
guest

0

melianさんがそのものずばりの答えを書いているので余談的な話を。

Juliaの場合は,同じ関数名でも引数の型によって動作が異なります。

Juliapのreplで

julia> using DataFrames julia> append!(

と入力し,ここで[TAB]を押すと対応したappend!(に対応した型がずらずら
列挙して表示されます。

append!(B::BitVector, items::BitVector) in Base at bitarray.jl:766 append!(B::BitVector, items) in Base at bitarray.jl:782 append!(A::Vector{Bool}, items::BitVector) in Base at bitarray.jl:783 append!(a::Vector{T} where T, items::AbstractVector{T} where T) in Base at array.jl:977 append!(pv::PooledArrays.PooledVector{T, R, RA} where {T, R, RA}, items::AbstractArray) in PooledArrays at C:/Users/user/.julia/packages/PooledArrays/DuIZ1/src/PooledArrays.jl:607 append!(cb::DataStructures.CircularBuffer, datavec::AbstractVector{T} where T) in DataStructures at C:/Users/user/.julia/packages/DataStructures/vSp4s/src/circular_buffer.jl:128 append!(a::AbstractVector{T} where T, iter) in Base at array.jl:985 append!(a::AbstractVector{T} where T, iter...) in Base at array.jl:988 append!(l1::DataStructures.MutableLinkedList{T}, l2::DataStructures.MutableLinkedList{T}) where T in DataStructures at C:/Users/user/.julia/packages/DataStructures/vSp4s/src/mutable_list.jl:153 append!(l::DataStructures.MutableLinkedList, elts...) in DataStructures at C:/Users/user/.julia/packages/DataStructures/vSp4s/src/mutable_list.jl:160 append!(df1::DataFrame, df2::AbstractDataFrame; cols, promote) in DataFrames at C:/Users/user/.julia/packages/DataFrames/MA4YO/src/dataframe/dataframe.jl:1313 append!(df::DataFrame, table; cols, promote) in DataFrames at C:/Users/user/.julia/packages/DataFrames/MA4YO/src/other/tables.jl:63

最初利用していたappend!関数で,DataFrame型に対応したものは二つあり,二つ目の引数はDataFrame型のようです。

つまり,

julia

1 2append!(df, df1)

df1ごと追加できそうということが何となく分かります。

また,関数のhelpは英語になりますが,

julia>

の状態で?を入力すると

help?>

となるので,

help?>push!

と入力すると,push!の簡単な使い方が分かります。
いくつかの型に対するhelpが出てくるので,DataFrameに対応するものを参照するといいでしょう。

第二引数のrowのところに,DataFrameRowに対する記述があるものがありますよね。

Juliaの利用はreplを上手く利用すると理解が進むかと思います。

投稿2022/03/17 14:36

ujimushi_sradjp

総合スコア2179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問