我想比較兩個表(table_a和table_b)並從table_b的最後一列中減去table_a的最後一列。但是,table_a包含一個額外的行,並導致我得到一個NoneType錯誤。是否有一個我可以仍然包括table_a的「李子」行,只是輸出爲零增量單元「NULL」?以下是我的可測試代碼。Python在解析表時處理NoneType
目前代碼:
from datetime import datetime
import itertools
table_a = (
(datetime(2016, 9, 28, 0, 0), 'Apples', 650, 700, 850),
(datetime(2016, 9, 28, 0, 0), 'Oranges', 900, 950, 1000),
(datetime(2016, 9, 28, 0, 0), 'Grapes', 1050, 1100, 1150),
(datetime(2016, 9, 28, 0, 0), 'Plums', 2000, 3000, 4000)
)
table_b = (
(datetime(2016, 9, 27, 0, 0), 'Apples', 50, 150, 200),
(datetime(2016, 9, 27, 0, 0), 'Oranges', 250, 350, 400),
(datetime(2016, 9, 27, 0, 0), 'Grapes', 450, 550, 600),
)
table_format = '{:<10}|{:<8}|{:<8}|{:<8}|{:<8}|{:<12}'
line_sep = ('-' * 60)
print(line_sep)
print(table_format.format('Date', 'Count_1', 'Count_2', 'Count_3' , 'Count_4', 'Count_4_Delta'))
for a, b in itertools.zip_longest(table_a, table_b):
l = str(a[0])[0:10]
m = a[1]
n = a[2]
o = a[3]
p = a[4]
q = b[4]
print(line_sep)
print(table_format.format(l, m, n, o, p, (p-q)))
輸出與錯誤:
------------------------------------------------------------
Date |Count_1 |Count_2 |Count_3 |Count_4 |Count_4_Delta
------------------------------------------------------------
2016-09-28|Apples |650 |700 |850 |650
------------------------------------------------------------
2016-09-28|Oranges |900 |950 |1000 |600
------------------------------------------------------------
2016-09-28|Grapes |1050 |1100 |1150 |550
Traceback (most recent call last):
File "/media/test.py", line 30, in <module>
q = b[4]
TypeError: 'NoneType' object is not subscriptable
如果我添加一個if語句刪除NoneType它打印該表沒有一個錯誤,但不包括 「李子」 行。
for a, b in itertools.zip_longest(table_a, table_b):
if a and b is not None:
l = str(a[0])[0:10]
m = a[1]
n = a[2]
o = a[3]
p = a[4]
q = b[4]
print(line_sep)
print(table_format.format(l, m, n, o, p, (p-q)))
輸出與如果聲明:
------------------------------------------------------------
Date |Count_1 |Count_2 |Count_3 |Count_4 |Count_4_Delta
------------------------------------------------------------
2016-09-28|Apples |650 |700 |850 |650
------------------------------------------------------------
2016-09-28|Oranges |900 |950 |1000 |600
------------------------------------------------------------
2016-09-28|Grapes |1050 |1100 |1150 |550
我想有下面的輸出。這裏的「梅子」行仍然打印,但有字符串「NULL」爲三角洲細胞
所需的輸出。
------------------------------------------------------------
Date |Count_1 |Count_2 |Count_3 |Count_4 |Count_4_Delta
------------------------------------------------------------
2016-09-28|Apples |650 |700 |850 |650
------------------------------------------------------------
2016-09-28|Oranges |900 |950 |1000 |600
------------------------------------------------------------
2016-09-28|Grapes |1050 |1100 |1150 |550
------------------------------------------------------------
2016-09-27|Plums |2000 |3000 |4000 |NULL
這是[pandas'](http://pandas.pydata.org/)軟件包的完美應用程序。一探究竟。 –