【问题标题】:Get rows with blank value as text from python pandas从python pandas获取具有空白值的行作为文本
【发布时间】:2018-07-08 15:21:57
【问题描述】:

我有这个 python 代码,它从 DB2 数据库中提取一些数据到 Pandas 数据框 data1 和 data2 中。 Data2 有一个名为 ARCD 的列,其文本值为 ''、'01'、'03'、'14' 等。

TABLE1
    CSOFF      CSDATE
    ABC        20180101
    ADV        20180212
    AFS        20180121
    ADF        20180202
    ABC        20180115

TABLE2
    AROFF      ARAMT        ARCD      ARTRDT
    ABC        200                    20180101
    AFS        150          01        20180121
    ADV        210                    20180129

我只需要 data3 中 ARCD 中的值为空白的那些记录,即“”和“01”。

我可以获取所有具有“01”、“03”等代码的值。但我无法提取具有空白值的记录,即“”。

import pyodbc
import pandas as pd
con = pyodbc.connect(
    driver='{iSeries Access ODBC Driver}',
    system='',
    uid='',
    pwd='')
cur = con.cursor()
query = """
SELECT * FROM QS99F.TABLE1 WHERE CSDATE > 20180100
"""
data1 = pd.read_sql(query,con,index_col = None)
query = """
SELECT * FROM QS99F.TABLE2 WHERE ARTRDT > 20180100
"""
data2 = pd.read_sql(query,con,index_col = None)
data3 = pd.merge(data1[['CSOFF','CSRATE']],data2[['AROFF','ARAMT','ARCD']],left_on=['CSOFF','CSMKT','CSSUFX'],right_on=['AROFF','ARMKT','ARSUFX'],how='inner')
dp = data3['ARCD'] == "01"
ar = data3['ARCD'] == ""
data3 = data3[dp|ar]
print (data3)

【问题讨论】:

  • 请提供minimal reproducible exampledata3[dp|ar] 怎么不起作用?
  • data3[dp|ar] 正在工作,它没有选择“”(空白)的记录。如果我在 ar 中放入任何不是“”的东西,那么它就可以工作。所以我们不能说 data3[dp|ar] 不起作用。

标签: python database pandas join db2


【解决方案1】:

很可能您的空白值实际上是nan 而不是""

您可以按如下方式更改:

data3 = data3.fillna("")

在你的测试之前。

【讨论】:

  • 你试过了吗?
  • 非常感谢@adr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2022-01-18
相关资源
最近更新 更多