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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1338閲覧

Json→csvへの変換において出力後のcsvファイルに謎の空欄が発生する

roritamago

総合スコア5

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/15 05:34

◆やりたいこと
ご存知の方もおられると思いますがopenposeという人のボーンを取ってくれるライブラリがあります.
それから出力されたjsonファイルを扱いやすくするためにcsvファイルに変換するべくpythonでコードを書きました.

◆jsonの形式について
変換したいjsonは以下のような形式です.

json

1{"version":1.2,"people":[{"pose_keypoints_2d":[480.51,137.649,0.932902,435.4,178.822,0.925468,400.141,176.82,0.84857,368.752,255.226,0.936978,435.419,264.969,0.906356,472.622,182.685,0.887362,464.858,241.494,0.819495,488.309,278.654,0.879997,439.347,310.037,0.737694,417.806,311.968,0.714459,421.681,433.427,0.777746,408.039,564.777,0.807679,458.981,308.084,0.747975,457.014,429.54,0.77629,443.27,541.189,0.85189,472.665,129.78,0.942586,482.466,127.887,0.699542,441.329,122.011,0.923941,0,0,0,486.384,562.743,0.830317,484.444,554.95,0.797383,433.425,550.988,0.736156,439.291,596.083,0.830422,421.749,597.991,0.781411,400.171,574.502,0.770948],"face_keypoints_2d":[],"hand_left_keypoints_2d":[500.835,295.269,0.082843,503.446,289.611,0.171836,503.446,281.124,0.286441,499.094,272.638,0.47506,499.529,263.933,0.386288,495.83,285.042,0.0437668,487.996,283.953,0.0311321,495.177,286.782,0.0328251,496.265,288.741,0.0164935,489.519,287.653,0.0301932,490.607,289.176,0.0226237,492.348,290.264,0.0228563,495.612,291.352,0.0193227,495.83,290.917,0.0224454,491.26,293.093,0.0184001,493.218,295.269,0.0119496,494.742,292.005,0.0120259,494.524,303.974,0.0274781,489.301,304.409,0.0153368,489.084,303.974,0.0104764,498.006,302.668,0.00927013],"hand_right_keypoints_2d":[437.28,265.087,0.665087,446.575,264.777,0.651689,459.588,268.185,0.57085,467.643,275.001,0.392762,468.573,282.437,0.27604,468.883,274.381,0.803118,471.051,285.535,0.570498,467.953,285.225,0.453369,465.165,283.676,0.341526,464.545,279.338,0.708136,466.714,289.563,0.688114,461.757,287.084,0.630578,458.968,282.747,0.637146,459.278,282.747,0.682015,460.827,291.422,0.787688,456.49,288.323,0.64612,454.321,283.986,0.694441,452.772,286.464,0.438676,453.391,291.422,0.639158,450.603,288.943,0.679384,449.364,285.845,0.692048],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"pose_keypoints_2d":[4.38786,206.219,0.426892,31.8028,221.861,0.890919,37.7888,219.878,0.888075,51.3872,243.467,0.801302,45.5324,255.231,0.296693,24.0058,221.911,0.948507,24.0814,247.359,0.901165,18.0417,249.27,0.552002,37.6391,264.976,0.930212,41.6645,263.086,0.905747,37.6745,302.175,0.946339,51.4167,335.458,0.92848,29.8761,265.038,0.898596,16.1122,300.21,0.866859,22.016,335.509,0.937147,0,0,0,4.41405,202.283,0.411456,0,0,0,22.0806,204.205,0.840819,20.1169,335.568,0.556477,16.1588,339.372,0.618405,22.1338,339.449,0.921739,43.5541,339.377,0.623194,49.4863,337.506,0.633056,51.4954,339.373,0.899246],"face_keypoints_2d":[],"hand_left_keypoints_2d":[18.1958,252.701,0.0382155,17.6357,253.448,0.0313059,11.5674,259.796,0.01747,19.3161,255.595,0.0118686,13.0611,258.862,0.00913714,13.4346,252.514,0.0084061,13.5279,252.888,0.00887665,14.3681,253.354,0.00811167,12.4076,258.489,0.00525966,13.3412,253.728,0.00770605,9.79361,255.875,0.00444904,14.7416,255.502,0.00556176,12.2209,258.676,0.00516303,19.1294,255.782,0.00699655,9.23346,256.715,0.00504693,17.449,260.076,0.00587161,17.1689,260.263,0.0065628,19.3161,255.502,0.00823555,19.3161,255.688,0.00676438,19.4095,255.595,0.00566622,21.9301,257.369,0.00506586],"hand_right_keypoints_2d":[43.1009,256.017,0.0141236,48.5946,257.416,0.0239328,52.3902,257.915,0.0314102,53.3891,263.209,0.0377081,51.2915,257.116,0.0209093,48.7944,255.718,0.0227958,51.691,257.715,0.0301113,52.3902,263.908,0.0282359,51.1916,257.715,0.0126644,49.8931,255.817,0.0188679,50.7921,257.316,0.024923,51.8908,262.61,0.0231562,49.7932,259.214,0.00994507,49.5935,254.918,0.0191556,49.7932,260.612,0.0204803,50.1928,256.816,0.014164,49.7932,268.802,0.0140382,48.295,256.816,0.0143108,47.396,256.317,0.0131994,52.6899,264.108,0.0198887,53.2892,265.706,0.00967169],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"pose_keypoints_2d":[743.036,176.77,0.953658,739.123,214.122,0.942686,696.027,216.014,0.900261,680.349,278.698,0.935417,635.295,306.094,0.903126,780.253,214.068,0.899902,805.63,278.644,0.932299,850.792,306.191,0.912097,744.924,343.36,0.813191,719.455,343.394,0.776111,731.323,443.268,0.876878,739.103,541.222,0.86379,770.449,343.344,0.769926,766.577,445.166,0.857459,766.488,531.455,0.857251,735.168,165.143,0.937447,750.874,165.148,0.927892,721.468,163.08,0.913451,762.641,165.024,0.896242,762.59,562.805,0.778437,776.293,558.896,0.795406,762.588,539.282,0.691029,744.925,574.55,0.722252,733.163,574.492,0.744646,743.041,549.007,0.748074],"face_keypoints_2d":[],"hand_left_keypoints_2d":[851.696,309.428,0.403172,860.35,306.628,0.642241,872.058,307.391,0.64888,883.767,311.209,0.383146,890.639,315.791,0.176143,877.149,314.264,0.254288,884.276,313.755,0.284009,886.821,316.555,0.355213,889.875,317.827,0.395389,874.095,318.591,0.351253,881.221,320.118,0.418457,878.422,317.573,0.221032,872.567,315.027,0.412345,871.804,322.663,0.356216,876.131,323.681,0.557549,872.058,320.373,0.54243,869.259,317.318,0.608423,866.713,325.718,0.484632,870.022,325.718,0.341411,867.731,323.681,0.265244,865.441,321.645,0.341986],"hand_right_keypoints_2d":[633.938,308.024,0.228375,629.435,313.95,0.2434,619.005,316.32,0.257848,615.686,311.816,0.126884,615.449,309.209,0.141824,627.301,305.179,0.173174,612.842,301.15,0.14235,604.309,301.15,0.140722,600.279,299.491,0.09822,622.086,300.913,0.146583,611.894,299.491,0.163557,603.598,299.965,0.127339,605.257,308.261,0.0476691,620.664,299.491,0.18074,612.605,300.202,0.125419,607.153,305.891,0.0647793,604.546,307.313,0.0402951,619.479,299.491,0.183759,614.501,301.861,0.0917055,611.894,305.179,0.0595151,613.079,308.024,0.0368546],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]} 2```posekeypointsの中の値は (x座標,y座標,confidence)という順番になっています.poseは全25ポイント,handは全21ポイントです.また,pose_keypoints_2d~hand_right_keypoints_3dまでが一つのまとまりで,1人分のデータです.例のjsonファイルは3人分のデータですので,people:[{1人目}{2人目}{3人目}]という感じで入ってます. 3 4◆csvの形について 5このデータからpose_keypoints_2d,hand_left_keypoints_2d,hand_right_keypoints_2dの3項目を抽出して, 6_|列 7[pose_keypoints_2d][and_right_keypoints_2d][hand_left_keypoints_2d] 8[x] [y] [confidence] [x] [y] [confidence][x] [y] [confidence] 9 10という感じで1人目(25x3,21x3,21x3),2人目(25x3,21x3,21x3)… といった形で整理したいです. 11そのために書いたコードが以下です.(パワープレー臭がすごいと思いますがそこはの訂正はまた別でやります.) 12```python 13import json 14import numpy as np 15import pandas as pd 16import csv 17import glob 18 19j=0 20B=[] 21R=[] 22L=[] 23body=[] 24R_hand=[] 25L_hand=[] 26#json開く 27opened_file = open('001.json','r') 28loaded_file = json.load(opened_file) 29#要素数調べて何人分のボーンか見る 30number = len(loaded_file['people']) 31#jsonから配列を抜き出す 32for j in range(number): 33 B.append(loaded_file['people'][j]['pose_keypoints_2d']) 34 R.append(loaded_file['people'][j]['hand_right_keypoints_2d']) 35 L.append(loaded_file['people'][j]['hand_left_keypoints_2d']) 36 #行列の形(n*3)にする 37 body.append(np.array(B[j]).reshape(-1,3)) 38 R_hand.append(np.array(R[j]).reshape(-1,3)) 39 L_hand.append(np.array(L[j]).reshape(-1,3)) 40 #一人分ずつの体、手、足のデータをtempに一時保存 41 x = np.array(body[j]) 42 a=3*j 43 np.savetxt('temp%01d.csv'%a, x, delimiter=",") 44 y = np.array(R_hand[j]) 45 b=1+3*j 46 np.savetxt('temp%01d.csv'%b, y, delimiter=",") 47 z = np.array(L_hand[j]) 48 c=2+3*j 49 np.savetxt('temp%01d.csv'%c, z, delimiter=",") 50#csvファイルまとめて読み込み 51sample_files = glob.glob('*.csv') 52list = [] 53if number*3 == len(sample_files): 54 for file in sample_files: 55 list.append(pd.read_csv(file)) 56 #結合する 57 df = pd.concat(list) 58 df.to_csv('save\marge_result.csv',index=False) 59n=0 60if number*3 < len(sample_files): 61 for file in sample_files: 62 if n < (number*3): 63 list.append(pd.read_csv(file)) 64 n = n+1 65 #結合する 66 df = pd.concat(list) 67 df.to_csv('save\marge_result.csv',index=False) 68 69

この出力が,なぜか以下の画像のように段々になってしまいます.この問題を解決したいです.
ご回答いただけると嬉しいです.よろしくお願いいたします.
![イメージ説明]

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

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

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

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

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

guest

回答1

0

  • pd.read_csv(file)にはheader = Noneを追加してください。np.savetxtではヘッダ行は追加されないので。
  • 結合はfor fileループの外側で行ってください。
  • listという変数名はlstなど別名にしたほうがよいです。

ちなみに私なら、以下のような構造のCSVとして出力、管理します。

Python

1import json 2import numpy as np 3import pandas as pd 4 5s = """ 6{"version":1.2,"people":[{"pose_keypoints_2d":[480.51,137.649,0.932902,435.4,178.822,0.925468,400.141,176.82,0.84857,368.752,255.226,0.936978,435.419,264.969,0.906356,472.622,182.685,0.887362,464.858,241.494,0.819495,488.309,278.654,0.879997,439.347,310.037,0.737694,417.806,311.968,0.714459,421.681,433.427,0.777746,408.039,564.777,0.807679,458.981,308.084,0.747975,457.014,429.54,0.77629,443.27,541.189,0.85189,472.665,129.78,0.942586,482.466,127.887,0.699542,441.329,122.011,0.923941,0,0,0,486.384,562.743,0.830317,484.444,554.95,0.797383,433.425,550.988,0.736156,439.291,596.083,0.830422,421.749,597.991,0.781411,400.171,574.502,0.770948],"face_keypoints_2d":[],"hand_left_keypoints_2d":[500.835,295.269,0.082843,503.446,289.611,0.171836,503.446,281.124,0.286441,499.094,272.638,0.47506,499.529,263.933,0.386288,495.83,285.042,0.0437668,487.996,283.953,0.0311321,495.177,286.782,0.0328251,496.265,288.741,0.0164935,489.519,287.653,0.0301932,490.607,289.176,0.0226237,492.348,290.264,0.0228563,495.612,291.352,0.0193227,495.83,290.917,0.0224454,491.26,293.093,0.0184001,493.218,295.269,0.0119496,494.742,292.005,0.0120259,494.524,303.974,0.0274781,489.301,304.409,0.0153368,489.084,303.974,0.0104764,498.006,302.668,0.00927013],"hand_right_keypoints_2d":[437.28,265.087,0.665087,446.575,264.777,0.651689,459.588,268.185,0.57085,467.643,275.001,0.392762,468.573,282.437,0.27604,468.883,274.381,0.803118,471.051,285.535,0.570498,467.953,285.225,0.453369,465.165,283.676,0.341526,464.545,279.338,0.708136,466.714,289.563,0.688114,461.757,287.084,0.630578,458.968,282.747,0.637146,459.278,282.747,0.682015,460.827,291.422,0.787688,456.49,288.323,0.64612,454.321,283.986,0.694441,452.772,286.464,0.438676,453.391,291.422,0.639158,450.603,288.943,0.679384,449.364,285.845,0.692048],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"pose_keypoints_2d":[4.38786,206.219,0.426892,31.8028,221.861,0.890919,37.7888,219.878,0.888075,51.3872,243.467,0.801302,45.5324,255.231,0.296693,24.0058,221.911,0.948507,24.0814,247.359,0.901165,18.0417,249.27,0.552002,37.6391,264.976,0.930212,41.6645,263.086,0.905747,37.6745,302.175,0.946339,51.4167,335.458,0.92848,29.8761,265.038,0.898596,16.1122,300.21,0.866859,22.016,335.509,0.937147,0,0,0,4.41405,202.283,0.411456,0,0,0,22.0806,204.205,0.840819,20.1169,335.568,0.556477,16.1588,339.372,0.618405,22.1338,339.449,0.921739,43.5541,339.377,0.623194,49.4863,337.506,0.633056,51.4954,339.373,0.899246],"face_keypoints_2d":[],"hand_left_keypoints_2d":[18.1958,252.701,0.0382155,17.6357,253.448,0.0313059,11.5674,259.796,0.01747,19.3161,255.595,0.0118686,13.0611,258.862,0.00913714,13.4346,252.514,0.0084061,13.5279,252.888,0.00887665,14.3681,253.354,0.00811167,12.4076,258.489,0.00525966,13.3412,253.728,0.00770605,9.79361,255.875,0.00444904,14.7416,255.502,0.00556176,12.2209,258.676,0.00516303,19.1294,255.782,0.00699655,9.23346,256.715,0.00504693,17.449,260.076,0.00587161,17.1689,260.263,0.0065628,19.3161,255.502,0.00823555,19.3161,255.688,0.00676438,19.4095,255.595,0.00566622,21.9301,257.369,0.00506586],"hand_right_keypoints_2d":[43.1009,256.017,0.0141236,48.5946,257.416,0.0239328,52.3902,257.915,0.0314102,53.3891,263.209,0.0377081,51.2915,257.116,0.0209093,48.7944,255.718,0.0227958,51.691,257.715,0.0301113,52.3902,263.908,0.0282359,51.1916,257.715,0.0126644,49.8931,255.817,0.0188679,50.7921,257.316,0.024923,51.8908,262.61,0.0231562,49.7932,259.214,0.00994507,49.5935,254.918,0.0191556,49.7932,260.612,0.0204803,50.1928,256.816,0.014164,49.7932,268.802,0.0140382,48.295,256.816,0.0143108,47.396,256.317,0.0131994,52.6899,264.108,0.0198887,53.2892,265.706,0.00967169],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"pose_keypoints_2d":[743.036,176.77,0.953658,739.123,214.122,0.942686,696.027,216.014,0.900261,680.349,278.698,0.935417,635.295,306.094,0.903126,780.253,214.068,0.899902,805.63,278.644,0.932299,850.792,306.191,0.912097,744.924,343.36,0.813191,719.455,343.394,0.776111,731.323,443.268,0.876878,739.103,541.222,0.86379,770.449,343.344,0.769926,766.577,445.166,0.857459,766.488,531.455,0.857251,735.168,165.143,0.937447,750.874,165.148,0.927892,721.468,163.08,0.913451,762.641,165.024,0.896242,762.59,562.805,0.778437,776.293,558.896,0.795406,762.588,539.282,0.691029,744.925,574.55,0.722252,733.163,574.492,0.744646,743.041,549.007,0.748074],"face_keypoints_2d":[],"hand_left_keypoints_2d":[851.696,309.428,0.403172,860.35,306.628,0.642241,872.058,307.391,0.64888,883.767,311.209,0.383146,890.639,315.791,0.176143,877.149,314.264,0.254288,884.276,313.755,0.284009,886.821,316.555,0.355213,889.875,317.827,0.395389,874.095,318.591,0.351253,881.221,320.118,0.418457,878.422,317.573,0.221032,872.567,315.027,0.412345,871.804,322.663,0.356216,876.131,323.681,0.557549,872.058,320.373,0.54243,869.259,317.318,0.608423,866.713,325.718,0.484632,870.022,325.718,0.341411,867.731,323.681,0.265244,865.441,321.645,0.341986],"hand_right_keypoints_2d":[633.938,308.024,0.228375,629.435,313.95,0.2434,619.005,316.32,0.257848,615.686,311.816,0.126884,615.449,309.209,0.141824,627.301,305.179,0.173174,612.842,301.15,0.14235,604.309,301.15,0.140722,600.279,299.491,0.09822,622.086,300.913,0.146583,611.894,299.491,0.163557,603.598,299.965,0.127339,605.257,308.261,0.0476691,620.664,299.491,0.18074,612.605,300.202,0.125419,607.153,305.891,0.0647793,604.546,307.313,0.0402951,619.479,299.491,0.183759,614.501,301.861,0.0917055,611.894,305.179,0.0595151,613.079,308.024,0.0368546],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]} 7""" 8loaded_file = json.loads(s) 9 10key_points = ['pose_keypoints_2d', 'hand_right_keypoints_2d','hand_left_keypoints_2d'] 11 12# person毎 13dfs = [] 14for idx, person in enumerate(loaded_file['people']): 15 # key_points毎 16 for kp in key_points: 17 ary = np.array(person[kp]).reshape(-1,3) 18 df = pd.DataFrame(ary, columns=['x', 'y', 'c']) 19 df['person_id'] = idx 20 df['key_point'] = kp 21 dfs.append(df) 22 23df = pd.concat(dfs).sort_values(['person_id', 'key_point']) 24df.to_csv('ret.csv', index=False) 25print(df) 26""" 27 x y c person_id key_point 280 500.835 295.269 0.082843 0 hand_left_keypoints_2d 291 503.446 289.611 0.171836 0 hand_left_keypoints_2d 302 503.446 281.124 0.286441 0 hand_left_keypoints_2d 313 499.094 272.638 0.475060 0 hand_left_keypoints_2d 324 499.529 263.933 0.386288 0 hand_left_keypoints_2d 33.. ... ... ... ... ... 3420 776.293 558.896 0.795406 2 pose_keypoints_2d 3521 762.588 539.282 0.691029 2 pose_keypoints_2d 3622 744.925 574.550 0.722252 2 pose_keypoints_2d 3723 733.163 574.492 0.744646 2 pose_keypoints_2d 3824 743.041 549.007 0.748074 2 pose_keypoints_2d 39 40[201 rows x 5 columns] 41"""

投稿2021/10/15 06:17

編集2021/10/15 06:37
can110

総合スコア38278

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問