私はそのようなデータフレームを持っています:
>>> import pandas as pd
>>> pd.read_csv('csv/10_no_headers_with_com.csv')
//field field2
0 //first field is time NaN
1 132605 1.0
2 132750 2.0
3 132772 3.0
4 132773 4.0
5 133065 5.0
6 133150 6.0
最初のフィールドの最初の値がコメント文字であるかどうかを示す別のフィールドを追加したいと思い//
ます。これまでのところ、私はこのようなものを持っています:
# may not have a heading value, so use the index not the key
df[0].str.startswith('//')
この値を使用して新しい列を追加する正しい方法は何でしょうか。その結果、次のようになります。
pd>>> pd.read_csv('csv/10_no_headers_with_com.csv', header=None)
0 1 _starts_with_comment
0 //field field2 True
1 //first field is time NaN True
2 132605 1 False
3 132750 2 False
4 132772 3 False
単に新しい列に割り当てられたコマンドの問題は何ですか?:
df['comment_flag'] = df[0].str.startswith('//')
または、jppで言及されているように、実際に混合型の列がありますか?
編集:
よくわかりませんが、あなたのコメントから、コメントフラグの追加の列は本当に必要ないという印象を受けます。コメントなしでデータをデータフレームにロードしたいが、コメント付きヘッダーにいくらか隠されたフィールド名を列名として使用したい場合は、これを確認することをお勧めします。
したがって、このテキストファイルに基づいて:
//field field2
//first field is time NaN
132605 1.0
132750 2.0
132772 3.0
132773 4.0
133065 5.0
133150 6.0
あなたができること:
cmt = '//'
header = []
with open(textfilename, 'r') as f:
for line in f:
if line.startswith(cmt):
header.append(line)
else: # leave that out if collecting all comments of entire file is ok/wanted
break
print(header)
# ['//field field2\n', '//first field is time NaN\n']
このようにして、たとえば列名に使用するためにヘッダー情報を準備します。
最初のヘッダー行から名前を取得し、それをパンダのインポートに使用するのは次のようになります
nms = header[0][2:].split()
df = pd.read_csv(textfilename, comment=cmt, names=nms, sep='\s+ ', engine='python')
field field2
0 132605 1.0
1 132750 2.0
2 132772 3.0
3 132773 4.0
4 133065 5.0
5 133150 6.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加