【问题标题】:Inserting 'NA' as a string into SQLite table using odo function on Python使用 Python 上的 odo 函数将“NA”作为字符串插入 SQLite 表
【发布时间】:2017-02-24 23:15:50
【问题描述】:

考虑以下 CSV 格式的文件 (stock_prices.csv):

Symbol,Price
RY,96.61
NA,58.69
BNS,80.35

在 Python 中使用 odo 函数将 CSV 文件插入 SQLite 数据库表时,NA 代码似乎作为 None 值插入。

from odo import odo, dshape

input_csv = 'stock_prices.csv'
output_sqlite = 'sqlite:///stocks.db::stock_prices'
ds = dshape('var * {Symbol: string, Price: float64}')

odo(input_csv, output_sqlite, dshape=ds)

这是我用来查询 SQLite 数据库的代码。

DB_PATH = 'stocks.db'
cn = sqlite3.connect(DB_PATH)
c = cn.cursor()
c.execute("SELECT * FROM stock_prices")
for row in c.fetchall():
    print(row)

结果如下:

('RY', 96.61)
(None, 58.69)
('BNS', 80.35)

虽然我可以用“NA”更新 Symbol 为 None 的每一行,但我宁愿第一次正确插入该行。

注意:我正在使用 odo 函数,因为对于我的实际项目,我将插入到表中的文件有几 GB 大,并且包含大约 15-20 列。 odo 在我看来是在短时间内完成我需要做的事情的最快方法。

【问题讨论】:

    标签: python csv sqlite odo


    【解决方案1】:

    解决此问题的一种方法是使用pandas 读取文件并指定na_filter=False

    >>> import pandas as pd
    >>> df = pd.read_csv('stock_prices.csv',na_filter=False)
    >>> df
      Ticker  Price
    0     RY  96.61
    1     NA  58.69
    2    BNS  80.35
    

    然后导入:

    odo(df, output_sqlite, dshape=ds)
    

    结果:

    >>> for row in c.fetchall():
    ...     print(row)
    ...
    (u'RY', 96.61)
    (u'NA', 58.69)
    (u'BNS', 80.35)
    

    【讨论】:

    • 干杯,伙计。祝您编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多