QGISでCSVファイルの全フィールドを結合する方法について

916 views
Skip to first unread message

EX1234 きなは5g

unread,
Jun 15, 2024, 1:47:33 AM6/15/24
to QGIS初心者質問グループ

QGISを使用して、CSVファイルの全てのフィールドを一つのフィールドに結合する作業を行いたいと考えています。しかし、具体的な方法がわからず困っています。

私の状況は以下の通りです:

  • CSVファイルをQGISにインポートしています。
  • 全てのフィールドを結合して一つのフィールドにしたいのですが、フィールドが多数あるため手動で全てのフィールド名を入力するのは非効率です。

具体的には、以下の問題に直面しています:

  • 全フィールドを一つのフィールドに結合するための効率的な方法がわからない。

CSVファイルの全フィールドを一つのフィールドに結合するための正しい手順やスクリプトを教えていただけますでしょうか。

お忙しいところ恐縮ですが、どうぞよろしくお願いいたします。

EX1234 きなは5g

unread,
Jun 15, 2024, 1:58:56 AM6/15/24
to QGIS初心者質問グループ
ちなみにOSは3.36.3です。

2024年6月15日土曜日 14:47:33 UTC+9 EX1234 きなは5g:

rikum...@gmail.com

unread,
Jun 15, 2024, 2:05:28 AM6/15/24
to QGIS初心者質問グループ
一番簡単なのはベクタ→データ管理ツール→ベクタレイヤのマージではないでしょうか?

2024年6月15日土曜日 14:58:56 UTC+9 mokab...@gmail.com:
Message has been deleted

futoshi kidani

unread,
Jun 15, 2024, 10:09:51 AM6/15/24
to QGIS初心者質問グループ
レコードでなくフィールドのマージですかね?

QGISで作業する必要性は何でしょうか?
csvはカンマまたはタブ区切りのデータのため、テキストエディタでカンマまたはタブ区切りを消して再読み込みする方が早い気がします。
位置情報を持った状態で読み込ませているのなら、上記作業後にIDフィールド作って位置情報と結合させるのが早いと思います。
2024年6月15日土曜日 15:05:28 UTC+9 rikum...@gmail.com:
Message has been deleted

ありた

unread,
Jun 16, 2024, 12:35:53 AM6/16/24
to QGIS初心者質問グループ
こんにちは

私も、エクセルやテキストエディタの置換機能などで対応するほうが
状況も確認でき、よいのではないかと思います。
エクセルでの作業は、
 ・エクセルを開き、 Ctrl+A で全セル選択し、書式を標準から文字列に変更
 ・QGIS の属性テーブルを開き、 Ctrl+A で全地物選択し、 Ctrl+C でコピー
 ・エクセルに貼り付け
で位置情報付きで転記できます。エクセル関数など利用し、目的の操作ができたら
「タブ区切りテキスト」の形式で保存し、 QGIS に読み込ませることができます。
(もしエクセルに貼り付けたものに位置情報が付与されない場合はメニューバーの設定→
 オプション→データソースの「地物のコピー」が「WKT ジオメトリ」か確認)


次点で、フィールド名はフィールド計算機の「フィールドと値」から入力補助が
利用できるため、利用するとよいと思います。
ただし、値に NULL の場合は、連結結果も NULL になるため coalesce 関数を
かませたほうがよいでしょう。これも一旦フィールド名の選択入力を行ったのち
テキストエディタの置換機能などが便利です。例として
coalesce("field1",'') || ' ' || coalesce("field2",'') || ' ' || coalesce("field3",'')


可読性が低く、またフィールド順が内部構造も関係するのかカラム順とは一致せず
あまりおすすめしませんが、どうしても一発の式でやりたい場合は前述の式を文字列として
生成するような式を作り、それに eval 関数を適用する下記のような方法もあります。
わかりにくいので、文字列リテラルを青色にしています。
空白区切りで連結するようになっていますが、区切り文字を変えたい場合は
黄色背景の箇所を変更してください。
eval(
    'coalesce("'
    ||
    array_to_string(map_akeys(attributes()), '",'''') || '' '' || coalesce("')
    ||
    '",'''')'
)





2024年6月15日土曜日 23:09:51 UTC+9 kidani...@gmail.com:

岩佐嘉久

unread,
Jun 16, 2024, 3:13:46 AM6/16/24
to QGIS初心者質問グループ
いわさ@愛媛です。
自分も他の方と同じでCSVならばあえてQGISでやるよりエクセルでやった方がいいと感じました。
まあQGISは地図上等で見る場合には有効とは思いますがそれぞれの得意分野があるような。
なのでCSVファイルですでにあるデータの加工ならばエクセルの方がいいかと思います。

もし行数が多くデータ件数で難しい場合Pythonでやった方がいいかと。

QGISで強いのは位置情報関係なので例えば緯度経度を本来のCRSから他のCRSに変換などならば
当然QGISでやった方がいいかと思いますがすでにあるデータを単に結合ならばエクセルでやった方が
簡単かと思います。

2024年6月16日日曜日 13:35:53 UTC+9 ありた:

rikum...@gmail.com

unread,
Jun 16, 2024, 5:07:29 AM6/16/24
to QGIS初心者質問グループ
レスが伸びてて驚きました!
今回の場合はQGISにすでにインポートしてしまっているということだったので
マージすればいいのではと思いました。

また、マージのいい点はソースがわかるということです。
100件のcsvをくっつけたいときに全部QGISにドロップしてマージすると
この点のデータはどのcsvから来たものかがわかります。

個人的にはよく使ってます。

2024年6月16日日曜日 16:13:46 UTC+9 yosh...@gmail.com:

futoshi kidani

unread,
Jun 16, 2024, 5:53:50 AM6/16/24
to QGIS初心者質問グループ
多分、ディゾルブ処理またはソースの違うcsvの結合の事かと思いますが、質問者さんがしたいのはカラムの統合なので、操作が違うように感じます…

2024年6月16日日曜日 18:07:29 UTC+9 rikum...@gmail.com:

岩佐嘉久

unread,
Jun 18, 2024, 2:54:30 AM6/18/24
to QGIS初心者質問グループ
今日偶然QGISでやることがあったのですが自分の場合、フィールド計算機でconcat(field1, ' ', field2)でこんな感じでやりました。 
ただしQGISに読み込む前ならやはりエクセルが無難なような。
2024年6月16日日曜日 18:53:50 UTC+9 kidani...@gmail.com:
Reply all
Reply to author
Forward
0 new messages