在 Python 上使用 odo 函数将 'NA' 作为字符串插入到 SQLite 表中



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

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

在Python中使用 odo 函数将CSV文件插入SQLITE数据库表中时,Na ticker似乎被插入无值。

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"的行,但我宁愿第一次正确插入行。

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

解决此问题的一种方法是在使用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)

最新更新