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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Q&A

解決済

2回答

269閲覧

to_csv 区切り文字をタブにしたい

ita_61279

総合スコア9

Python 3.x

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

0グッド

0クリップ

投稿2022/03/23 06:22

いつもお世話になっております。

python

1 ID No 判別 data1 data2 data3 data4 26 CID 50001231 101010 12345678 12345678 12345678 12345678 37 + 12345678 12345678 NaN NaN NaN NaN 410 CID 50001231 10 12345678 12345678 12345678 12345678 511 + 12345678 12345678 NaN NaN NaN NaN 613 CID 50001231 1010 12345678 12345678 12345678 12345678 714 + 12345678 12345678 NaN NaN NaN NaN

上記データ(data)をto_csv()を用いて出力したいです。

python

1data.to_csv("パス",header=False,sep="\t",index=False)

すると

python

1#これは理想の出力ではありません 2CID 50001231 101010 12345678 12345678 12345678 12345678 3+ 12345678 12345678 4…(略)

というように8文字入っているものはそのあとに8字分の空白を挿入されてしまいます。

python

1#これが理想です 2CID 50001231101010 12345678123456781234567812345678 3+ 1234567812345678 4CID 5000123110 12345678123456781234567812345678 5+ 1234567812345678 6…(略)

やってみたこと

python

1data['CID']=data['CID'].map('{} '.format) 2contact=[data['ID']+data['No']…以下略

formatを使って8文字に合わせて1列にまとめた後に区切り文字なしで出力しようとしたが
’ID’ '判別'列が文字数が違うこともあり、うまくいかない。
文字数により条件分岐させればできないこともないと思いますが、、
より良い方法やご意見ありましたら教えてください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

あなたの思う理想のフォーマットにあうように1行づつ文字列操作して作っていくしかないです

投稿2022/03/23 06:31

編集2022/03/23 06:32
y_waiwai

総合スコア87719

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

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

ita_61279

2022/03/23 06:34

やはりそうなのですね。 ありがとうございます。
y_waiwai

2022/03/23 06:42

たとえば8文字区切りでうまく出力する方法を見つけたとして、たとえばずっとあとの方の行でいきなり20桁の項目が出てきたときは、そこで体裁崩れるわけで、そしたら前の方の行はどうすんの?ってはなしになります
ita_61279

2022/03/23 07:00

おっしゃる通り、あまり意味のないフォーマットかもしれません。 カンマ区切りなどの別フォーマットになっても別のソフトへの読み込みができるかを確認してみようと思います。
guest

0

既に解決済みですが参考までに。。。

python

1with open('output.dat', 'w') as f: 2 f.write('\n'.join( 3 l.strip() for l in 4 data.apply(lambda x: x.fillna('').astype(str).str.ljust(8).sum(), axis=1).values))

bash

1$ cat output.dat 2CID 50001231101010 12345678123456781234567812345678 3+ 1234567812345678 4CID 50001231101010 12345678123456781234567812345678 5+ 1234567812345678 6CID 50001231101010 12345678123456781234567812345678 7+ 1234567812345678

投稿2022/03/23 09:37

melian

総合スコア19618

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問