【python】pandasライブラリで作ったファイルのヘッダー行とインデックス列について
pandasライブラリを使うときのヘッダー行、インデックス列の有無
気づきの多いことはいいことなんですが、以下にpythonを脳死して使ってきたのかということが浮き彫りになっています。
前回のMySQLを操作する回で、ゴミ行とcveid列に連番が入っていて、データがずれていることを発見しました。
mysql> select * from NVD_DB.NVD_CVE_INFO;
+-------+------------------+---------------------+---------------------+-------------------------+
| cveid | sourceidentifier | published | lastModified | vulnStatus |
+-------+------------------+---------------------+---------------------+-------------------------+
| | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 3 |
| 0 | CVE-1999-0095 | 0000-00-00 00:00:00 | 1988-10-01 04:00:00 | 2025-04-03T01:03:51.193 |
+-------+------------------+---------------------+---------------------+-------------------------+
python上で、pandasライブラリを使ってNVDから拾ってきたデータをCSVファイル化していますが、この時に引数の指定が足りなさすぎました。
悪い例です。(いや、悪くはないんだけど、今回に限っては、、、です。)
csv_data = pd.DataFrame(csv_cve_info)
csv_data.to_csv(os.path.join(self.userDocPath, self.FILE_CVE_INFO))
to_csvメソッドを呼び出す時にファイルのフルパスしか指定していません。
この状態だと、pandasが自動的にヘッダー行、インデックス列を追加します。
ヘッダー行は明示的に指定していないためブランクが入っています。
インデックス列については自動的に0からカウントアップされていくようです。
これをつけたくない場合は以下の通りとします。
csv_data = pd.DataFrame(csv_cve_info)
csv_data.to_csv(os.path.join(self.userDocPath, self.FILE_CVE_INFO), index=False, header=False)
index=False:インデックス列を不要にします。
header=False:ヘッダー行を不要にします。
引数名を指定しているため順序はどちらが先でも問題ありません。
ということで、プログラムを修正するとともに、MySQLに対して無心でDeleteコマンドを発行していきます。
docker restart コンテナID または コンテナ名
その後、MySQLサーバーへ入り直し、以下コマンドで結果を確認します。
mysql> select * from NVD_DB.NVD_CVE_INFO;
+---------------+------------------+---------------------+---------------------+------------+
| cveid | sourceidentifier | published | lastModified | vulnStatus |
+---------------+------------------+---------------------+---------------------+------------+
| CVE-1999-0001 | cve@mitre.org | 1999-12-30 05:00:00 | 2025-04-03 01:03:51 | Deferred |
+---------------+------------------+---------------------+---------------------+------------+
2000 rows in set (0.00 sec)
整いました。
そもそも、引数たくさんあるんだからちゃんと理解してから使えよ、っていうことですね。
コメント
コメントを投稿