パンダread_csv()メソッドは、有効な文字列ではなく、「NA」をナンバー(数字ではない)として解釈します。パンダが「NA」を文字列のNaNとして解釈しないようにする
以下の簡単なケースでは、行1、列2(ゼロベースのカウント)の出力が「NA」ではなく「nan」であることに注意してください。
sample.tsv(タブ区切り)
PDBチェーンSP_PRIMARY RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 1 126 1 126 1 126
5d8b O P60491 1 118 1 118 1 118
read_sample.py
import pandas as pd
df = pd.read_csv(
'sample.tsv',
sep='\t',
encoding='utf-8',
)
for df_tuples in df.itertuples(index=True):
print(df_tuples)
出力
(0、u'5d8b 'u'N'、u'P60490' 、1、146、1、146、1、146)
( 1、u'5d8b '、u'5d8b'、u'5d8b '、u'5d8b'、u'5d8b '、u'PD4''1、 1,118,118)
追加のInforma
'CHAIN'列にデータを引用符で置き換えた後、quotecharパラメータquotechar='\''
を使用してファイルを書き直すと、同じ結果になります。 dtypeパラメータdtype=dict(valid_cols)
で型の辞書を渡しても結果は変わりません。
古い答えはPrevent pandas from automatically inferring type in read_csvです。まずnumpyレコード配列を使用してファイルを解析することを提案しますが、今は列dtypesを指定できるため、これは必要ではありません。
itertuples()は、iterrowsのドキュメントに記載されているように、dtypesを保持するために使用されることに注意してください: "行を反復処理しながらdtypesを保持するには、値のタプルを返すitertuples() iterrowsとして。
例は、Python 2と3で、パンダバージョン0.16.2、0.17.0、および0.17.1でテストされました。
有効な文字列「NA」の代わりに、それはNaNに変換さをキャプチャする方法はありますか?
それはむしろそれが数として扱いだということではないですが、あなたは[データ欠落](http://pandas.pydata.orgを持っていることを示すパラメータを使用してから来ました/pandas-docs/stable/missing_data.html#values-considered-missing)。私はあなたの場合に修正が何であるか分からないが、ちょうどあなたが知っておくべきだと思った。 –
@JeffMercado下記のAntonの例を試しても、 'keep_default_na = False'を取り除くと、NaNは実際には' 'になります。 –
binarysubstrate
@binarysubstrate質問を少しだけトリミングすることも考えられます(例えば、「単純なケース」のままにしておきます)。これは、質問をより集中し、他の読者にとってより便利にするでしょう(非常に良い質問です)。 – joris