0

を使用してpostgresテーブル全体をクエリします

c.execute("select * from train_temp")
trans=np.array(c.fetchall())

予想されるデータの中で、列名を含む1行を取得しました。

trans[-1,]
Out[63]: 
array(['ACTION', 'RESOURCE', 'MGR_ID', 'ROLE_ROLLUP_1', 'ROLE_ROLLUP_2',
       'ROLE_DEPTNAME', 'ROLE_TITLE', 'ROLE_FAMILY_DESC', 'ROLE_FAMILY',
       'ROLE_CODE', None, None, None, None, None, None, None, None, None], dtype=object)

さらに不可解なのは、返される行数がテーブル内の行数と一致するという事実です

trans.shape
Out[67]: (32770, 19)



select count(1) from train_temp ;
 count 
-------
 32770
(1 row)

これがテーブルのスキーマです

                         Table "public.train_temp"
       Column        |       Type       | Modifiers | Storage  | Description 
---------------------+------------------+-----------+----------+-------------
 action              | text             |           | extended | 
 resource            | text             |           | extended | 
 mgr_id              | text             |           | extended | 
 role_rollup_1       | text             |           | extended | 
 role_rollup_2       | text             |           | extended | 
 role_deptname       | text             |           | extended | 
 role_title          | text             |           | extended | 
 role_family_desc    | text             |           | extended | 
 role_family         | text             |           | extended | 
 role_code           | text             |           | extended | 
 av_role_code        | double precision |           | plain    | 
 av_role_family      | double precision |           | plain    | 
 av_role_family_desc | double precision |           | plain    | 
 av_role_title       | double precision |           | plain    | 
 av_role_deptname    | double precision |           | plain    | 
 av_role_rollup_2    | double precision |           | plain    | 
 av_role_rollup_1    | double precision |           | plain    | 
 av_mgr_id           | double precision |           | plain    | 
 av_resource         | double precision |           | plain    | 
Has OIDs: no

何が起きてる?すべてのテーブルで発生するわけではないことに注意してください。実際、この最後のものでは、プロセスは正常に機能します

 Table "public.play"
  Column   |       Type       | Modifiers | Storage  | Description 
-----------+------------------+-----------+----------+-------------
 row.names | text             |           | extended | 
 action    | double precision |           | plain    | 
 color     | text             |           | extended | 
 type      | text             |           | extended | 
Has OIDs: no

この最後のテーブルは完全に文字列として渡されますが、問題のあるテーブルはデータ型を尊重します。

play[1,]
Out[73]: 
array(['2', '0.0', 'blue', 'car'], 
      dtype='|S5')


trans[1,]
Out[74]: 
array(['1', '0', '36', '117961', '118413', '119968', '118321', '117906',
       '290919', '118322', 0.920412992041299, 0.942349726775956,
       0.933439675174014, 0.920412992041299, 0.976, 0.964478764478764,
       0.949222217031812, 0.909090909090909, 0.923076923076923], dtype=object)

洞察をありがとう。

4

1 に答える 1

0

実際、*csv を postgres にインポートするときにヘッダーを自分で書きました。

私はそのようなheaderオプションを使用する必要がありましたpsql

\copy test from 'test.csv' with (delimiter ',' , format csv, header TRUE);
于 2013-06-20T16:39:37.167 に答える