转换pd.read\ sql\查询至pd.数据帧将字符串转换为nan

2024-03-28 08:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试使用pd.DataFrame将从pd.read_sql_query生成的SQL查询转换为数据帧时,我的字符串值被转换为nan。你知道吗

我尝试使用数据类型来设置每列的类型

SQL_Query = pd.read_sql_query('''SELECT [CircuitID], [Status], 
                                        [LatestJiraTicket], [MrcNew] 
                                  FROM CircuitInfoTable 
                                  WHERE ([Status] = 'Active') 
                                     OR ([Status] = 'Pending')
                                     OR ([Status] = 'Planned')''', conn)
# print(SQL_Query)
cdf = pd.DataFrame(SQL_Query, columns=['CID', 'Status', 'JiraTicket', 'MrcNew'])

SQL查询输出:

0                                      OH1004-01  ...      NaN
1                                      OH1004-02  ...      NaN
2                                      OH1005-01  ...      NaN
3                                      OH1005-02  ...      NaN
4                                      AL1001-01  ...      NaN
5                                      AL1001-02  ...      NaN
6                                      AL1007-01  ...      NaN
7                                      AL1007-02  ...      NaN
8                                      NC1001-01  ...      NaN
9                                      NC1001-02  ...      NaN
10                                     NC1001-03  ...      NaN
11                                     NC1001-04  ...      NaN
12                                     NC1001-05  ...      NaN
13                                     NC1001-06  ...      NaN
14                          (ommited on purpose)  ...   5200.0
15                                      MO001-02  ...      NaN
16                                      OR020-01  ...   8000.0
17                                      MA004-01  ...   6500.0
18                                      MA004-02  ...   6500.0
19                                      OR004-01  ...  10500.0
20                          (ommited on purpose)  ...   3975.0
21                                      OR007-01  ...   2500.0
22                          (ommited on purpose)  ...   9200.0
23                          (ommited on purpose)  ...  15000.0
24                          (ommited on purpose)  ...   5750.0
25                                     CA1005-02  ...  47400.0
26                                     CA1005-03  ...  47400.0
27                                     CA1005-04  ...  47400.0
28                                     CA1005-05  ...  47400.0
29                                     CA1006-01  ...      0.0

数据帧输出:

     CID   Status JiraTicket   MrcNew
0    nan  Planned        nan      NaN
1    nan  Planned        nan      NaN
2    nan  Planned        nan      NaN
3    nan  Planned        nan      NaN
4    nan  Planned        nan      NaN
5    nan  Planned        nan      NaN
6    nan  Planned        nan      NaN
7    nan  Planned        nan      NaN
8    nan  Planned        nan      NaN
9    nan  Planned        nan      NaN
10   nan  Planned        nan      NaN
11   nan  Planned        nan      NaN
12   nan  Planned        nan      NaN
13   nan  Planned        nan      NaN
14   nan   Active        nan   5200.0
15   nan  Pending        nan      NaN
16   nan  Pending        nan   8000.0
17   nan  Pending        nan   6500.0
18   nan  Pending        nan   6500.0
19   nan  Pending        nan  10500.0
20   nan   Active        nan   3975.0
21   nan  Pending        nan   2500.0
22   nan   Active        nan   9200.0
23   nan  Pending        nan  15000.0
24   nan   Active        nan   5750.0
25   nan  Pending        nan  47400.0
26   nan  Pending        nan  47400.0
27   nan  Pending        nan  47400.0
28   nan  Pending        nan  47400.0
29   nan  Pending        nan      0.0

Tags: sqlonstatusnanplannedqueryactivepd
1条回答
网友
1楼 · 发布于 2024-03-28 08:32:36

基本上,您在^{}中错误地使用了columns参数,其中arumgint指定要在结果输出中选择的列(不重命名)。从您的查询中,没有CID或JiraTicket,因此它们迁移时会丢失所有值。你知道吗

可能您打算重命名列。考虑在具有列别名的SQL或具有^{}^{}的pandas中重命名:

SELECT [CircuitID] AS [CID], 
       [Status], 
       [LatestJiraTicket] AS JiraTicket, 
       [MrcNew] 
FROM CircuitInfoTable 
WHERE ([Status] = 'Active') 
   OR ([Status] = 'Pending')
   OR ([Status] = 'Planned')

熊猫

cdf = (pd.read_sql_query(...original query...)
         .rename(columns={'CircuitID': 'CID', 'LatestJiraTicket': 'JiraTicket'})
      )

cdf = (pd.read_sql_query(...original query...)
         .set_axis(['CID', 'Status', 'JiraTicket', 'MrcNew'], axis='columns', inplace=False)
      )

相关问题 更多 >