2017-03-14 6 views
0

質問は簡単ですが、何時間もの検索の後に解決策が見つかりません。python pandas read_csvブール値を文字列として

私はcsvファイルを読み込み、オブジェクトとブール値を文字列に強制してSQLに書きたいと思っています。ただし、MSSQLへのデータの解析時には、TRUEとFALSEではなく、ブール値が文字列 '0'と '1'に変換されます。

、以下を参照してくださいコード:

pandasDF = pandas.read_csv(pathCSV, sep = ';') 
emptyTable(session, tableName) 
obj_cols = pandasDF.select_dtypes(include=[object, bool]).columns.values.tolist() 
pandasDF.to_sql(tableName, engine, if_exists = 'append', dtype = {c: String for c in obj_cols}, index = False) 

私は最善の解決策は、しかし、私はこれを達成する方法を見つけることができない、pandas.read_csvがブールデータ型を認識停止できるようにすることだと思う...

+0

'dtype = {c:obj_colsのcの文字列}'に 'String'とは何ですか?あなたのコードのどこにでも大文字のSを持つ 'String'が定義されていないので、私は尋ねます。 – vmg

+0

あなたの '' String' '変換がブール値のために働いていないので、必要なのは 'to_sql'のe'dtype'引数にカスタムディクテーションを渡すことだけです。 – vmg

+0

お返事ありがとうございました! 'dtype = {c:obj_colsのcの文字列}'はうまくいきます。オブジェクト型とブール型の両方が文字列に変換されていることを確認します。したがって、ブール型の列は文字列に変換されますが、 'TRUE'と 'FALSE'ではなく '1'と '0'の形式になります – Dendrobates

答えて

0

BOOL/BOOLEANは、TINYINT(1)の同義語です。

TRUEFALSE10の別名です実際の値は、この例を参照してください。

mysql> SELECT IF(0 = FALSE, 'true', 'false'); 
+--------------------------------+ 
| IF(0 = FALSE, 'true', 'false') | 
+--------------------------------+ 
| true       | 
+--------------------------------+ 

mysql> SELECT IF(1 = TRUE, 'true', 'false'); 
+-------------------------------+ 
| IF(1 = TRUE, 'true', 'false') | 
+-------------------------------+ 
| true       | 
+-------------------------------+ 

は詳細についてMySQL reference 5.7を参照してください。

+0

ターゲットDBMSがMySQLの場合、生成されたSQLクエリは正常に動作するはずです。あなたはクエリを実行しようとしましたか? – Felix

+0

DBMSはMSSQLです。私は、 '1'と '0'ではなく 'TRUE'と 'FALSE'と表示され、SQLの日付型としてvarcharsが必要です(プロセスの後の視覚化の理由)。私はそう思うだろう、そう?ブール値を認識しないオプションでcsvを読むことは可能ですか? – Dendrobates

+0

次に、可視化のための文字列 'TRUE'と 'FALSE'として値を取得するために、後続のプロセスで 'select if(...)'を使用することを検討してください。 – Felix

関連する問題