Python 将pd.read\u sql\u查询转换为pd.DataFrame会将字符串转换为nan

Python 将pd.read\u sql\u查询转换为pd.DataFrame会将字符串转换为nan,python,sql,pyodbc,Python,Sql,Pyodbc,当我尝试将从pd.read\u SQL\u Query生成的SQL查询使用pd.dataframe转换为数据帧时,我的字符串值将转换为nan 我尝试使用数据类型来设置每个列的类型 SQL_Query = pd.read_sql_query('''SELECT [CircuitID], [Status], [LatestJiraTicket], [MrcNew]

当我尝试将从
pd.read\u SQL\u Query
生成的SQL查询使用
pd.dataframe
转换为数据帧时,我的字符串值将转换为
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
基本上,您使用的columns参数不正确,因为Arument在结果输出中指定要选择的列(而不是重命名)。从您的查询中没有CID或JiraTicket,因此它们迁移时会丢失所有值

可能您打算重命名列。考虑在带有SQL别名的SQL中重命名,或者在熊猫中用OR:

重命名
选择[CircuitID]作为[CID],
[现状],
[LatestJiraTicket]作为JiraTicket,
[MrcNew]
从CircuitInfoTable
其中([状态]=“活动”)
或([状态]=“待定”)
或([状态]=“已计划”)
熊猫

cdf=(pd.read\u sql\u查询(…原始查询…)
.rename(列={'CircuitID':'CID','LatestJiraTicket':'JiraTicket'})
)
cdf=(pd.read\u sql\u查询(…原始查询…)
.set_轴(['CID','Status','JiraTicket','MrcNew',axis='columns',inplace=False)
)

Parfait您用.set\u轴钉住了它。。。谢谢你的帮助!很高兴听到这个消息,也很高兴能帮忙!请别忘了这个说法!