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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

1回答

2117閲覧

(Python)(Powershell) csvファイルから特定列の数値変換と、特定列以降のデータを削除したい(※前回質問の延長です)

Tsubasa123

総合スコア1

CSV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/06/25 06:46

前提・実現したいこと

csvファイルから、PythonまたはPowerShellを使って、特定列の数値変換と特定列以降のデータを削除したいのですが、経験不足のため、どうすれば実現できるのか悩んでいます。
どのように導くのが良いのでしょうか。

6/24に同様の質問をしましたが、さらにこのようなデータだったらどう編集するんだろう?と疑問に思ったので、再度質問させていただきました。
度々の同じような質問となり恐縮ですが、よろしくお願いいたします。

編集前ファイル

before.csv

部門コード,営業店コード,ユーザーコード,今回取得日,今回指示値,前回取得日,前回指示値,(指示値)整数値桁数,備考1,備考2,備考3,備考4
100,-,1000001,21/05/25,0003052,21/04/25,0002012,4,aaa,bbb,ccc,ddd
-,1000,1000002,21/05/26,0040073,21/04/26,0050052,3,eee,fff,ggg,hhh
200,-,2000001,21/05/24,0010527,21/04/23,0009358,5,iii,jjj,kkk,lll
-,9000,9000001,21/05/20,0006415,,,4,mmm,nnn,ooo,ppp

編集後ファイル

after1.csv
部門コード,営業店コード,ユーザーコード,今回取得日,今回指示値,前回取得日,前回指示値,備考1
100,-,1000001,20210525,3,20210425,2,aaa
-,1000,1000002,20210526,4,20210426,5,eee

after2.csv
部門コード,営業店コード,ユーザーコード,今回取得日,今回指示値,前回取得日,前回指示値,備考1
200,-,2000001,20210524,105,20210423,93,iii

after3.csv~after8.csv
部門コード,営業店コード,ユーザーコード,今回取得日,今回指示値,前回取得日,前回指示値,備考1

after9.csv
部門コード,営業店コード,ユーザーコード,今回取得日,今回指示値,前回取得日,前回指示値,備考1
-,9000,9000001,20210520,6,00000000,0,mmm

試したいこと

・ユーザーコードの先頭1桁目を判断して、ファイルを分割する。(1の場合はafter1.csv、2の場合はafter2.csv、…、9の場合はafter9.csvへ。3~8の場合は対象データがないためヘッダのみ出力してcsvへ。)

・今回取得日・前回取得日ともに日付は8桁に置き換えます。

・初回の指示値取得の場合は、前回取得日と前回指示値は編集前ファイルの時点で入っていません。入っていない場合は、前回取得日は00000000へ、前回指示値は0へ置き換えます。

・今回指示値・前回指示値は整数値と小数点以下の値が混在しています。編集前ファイルに、(指示値)整数値桁数を持っているため、指示値は整数値桁数に応じた数値に変換することとします。
(例)指示値:0003052、整数値桁数:4であれば、変換後の指示値は3。指示値:0010527、整数値桁数:5であれば、変換後の指示値は105。

・不要な列((指示値)整数値桁数と備考2以降)の列を削除する。

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

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

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

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

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

Y.H.

2021/06/25 10:54

> 試したいこと 「試したいこと」ではなく「試したこと」を記載し、試した結果どのような問題が発生し、何に困っているのかを具体的に記載されると回答つきやすいと思います。 「6/24に同様の質問」の解決済みが生かされず、単に「コード作ってくれてありがとう」 「今度はこんなことやるコード作って下さい!」としか読み取れないです。
guest

回答1

0

PowerShellで雑にやるなら下記みたいな感じですね

欠陥まみれですが上記で指定されたCSVファイルであれば
問題なく使用できます。

PowerShell

1$FilePath = <読込ファイルパス> 2$OutFile = <出力ファイルパス> 3 4# CSVをオブジェクトで取得 5$CSV = Import-Csv -Path $FilePath 6 7# ヘッダだけ読み取り 8$StrHeader = Get-Content -Path $FilePath|Select -f 1 9 10# ヘッダを","で分割 11$Header = $StrHeader -split "," 12 13# 9列分取得(0から8までの列インデックスを指定 ","区切りでとびとびの列も指定可能) 14$cut = $CSV|select $Header[0..8] 15 16# 出力 17$cut|Export-Csv -Path $OutFile

投稿2021/08/06 13:22

kamikazelight

総合スコア305

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問