Dtype検出についてのPandas DataFrameの動作にはかなり問題があります。python pandas dtypesの検出
私は 'read_sql_query'を使用してデータベースからデータを取得してDataFrameを構築し、それをcsvファイルにダンプします。
私は変換する必要はありません。ただ、形式のcsvファイルと変更日付フィールドにそれをダンプ:'%D /%M /%Y'
をしかし:
self.dataframe.to_csv(self.fic,
index=False,
header=False,
sep='|',
mode='a',
encoding='utf-8',
line_terminator='\n',
date_format='%d/%m/%Y
)
は、いくつかの日付フィールドの書式を設定/ transformeする欠場だろう。 ..
私はそれを別の方法で実行しようとしました:
l = list(self.dataframe.select_dtypes(include=['datetime64']).columns)
for i in l:
self.dataframe[i] = self.dataframe[i].dt.strftime('%d/%m/%Y')
を私は満足することを約あったが、いくつかのより多くのテストが変な挙動を示した:
私のSQL要求は2つだけnupletsを選択した場合:
requete = 'select * from DOMMAGE_INTERET where doi_id in (176433, 181564)'
すべては、どんな整形CSVまたはデータフレームで動作します。適切
それは、検出した日付フィールド:
df.dtypes
doi_id int64
aff_id int64
pdo_id int64
doi_date_decision datetime64[ns]
doi_date_mod datetime64[ns]
doi_montant float64
doi_reste_a_payer object
doi_appliquer_taux int64
doi_date_update datetime64[ns]
afg_id int64
dtype: object
しかし、異なる選択を使用している場合:
requete = 'select * from DOMMAGE_INTERET where rownum < 100'
それは再び欠場。
doi_id int64
aff_id int64
pdo_id int64
doi_date_decision object
doi_date_mod datetime64[ns]
doi_montant float64
doi_reste_a_payer object
doi_appliquer_taux int64
doi_date_update datetime64[ns]
afg_id int64
dtype: object
あなたが見ることができるように:そして実際に、種類が異なって検出されたフィールド「doi_date_decision」タイプは、要求選択の依存を変えるんが、もちろん、これは、同じデータセットです!
奇妙なのですか?
この現象についての説明はありますか?
特にデータセットがデータベースにある場合は、データセットなしでこの問題を理解することは難しいです。 – stockersky
'where in()'選択を使用してクエリで収集された2つの行は、 'numrow <100'の選択を使用して2番目のクエリに含まれます。そして、はい、1つはNULL値を持っています。データベース上で直接、書式設定はすべてのフィールドでまったく同じです。 – stockersky
列がNull値で始まる場合、Pandasはこの列dtypeを読み取って 'オブジェクト'としてマークできませんか? – stockersky