2017-02-24 33 views
1

ODO功能考慮以CSV格式下面的文件(stock_prices.csv):插入「NA」作爲字符串到SQLite表使用關於Python

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

當在Python使用ODO函數插入CSV文件放入SQLite數據庫表中,NA ticker似乎插入爲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」,我寧願正確插入該行的第一次。

注意:我正在使用odo函數,因爲對於我的實際項目,我將要插入表中的文件大小爲幾千兆字節,並且包含大約15-20列。 odo在我看來,是我在短時間內完成我所需要做的最快捷的方式。

回答

0

解決此問題的一種方法是使用​​讀取文件並指定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) 
+0

謝謝伯尼。有效! – bktags

+0

乾杯,隊友。快樂的編碼給你! – bernie