【发布时间】:2020-03-26 11:11:24
【问题描述】:
我正在使用 Panda read_csv。大多数行的最后一列是缺失数据,如下面的示例所示。但是在几行上,数据就在那里。与其将其视为空值,不如将其视为 NAN。我试图创建一个 if 语句来仅显示该列中包含数据的行。
(从美国运通到 CSV 的示例摘录):
2018 年 1 月 1 日星期一,“GOOGLE *SVCSAPPS_NEALW - CC@GOOGLE.COM, CA”,尼尔 Walters,XXXX-XXXXXX-XXXXX,,,4.16,,,GOOGLE SERVICES,"1600 AMPHITHEATER PKWYMOUNTAIN VIEWCA","94043-1351UNITED STATES",'320180020394601453',
colnames=['DateTime', 'NotUsed2', 'PayeeLong', 'NotUsed4', 'NotUsed5', 'NotUsed6', 'NotUsed7', 'Amount', 'NotUsed9',
'NotUsed10', 'Payee', 'PayeeAddress', 'PayeeCountry', 'NotUsedX', 'AmexCategory']
data = pd.read_csv(filenameAmexGold, names=colnames, header=None)
# Preview the first 5 lines of the loaded data
print (data.head())
for j in range(len(data)):
#if not(math.isnan(data['AmexCategory'][j])):
# if data['AmexCategory'][j] > ' ':
print("Row ", j, data['DateTime'][j], data['Payee'][j], data['Amount'][j],
"AmexCat=", data['AmexCategory'][j],
"PayeeLong=", data['PayeeLong'][j] )
data.head 的示例输出...
DateTime NotUsed2 ... NotUsedX AmexCategory
0 01/01/2018 Mon NaN ... '320180021453' NaN
1 01/02/2018 Tue NaN ... '320180035375' NaN
2 01/04/2018 Thu NaN ... '320180043184' NaN
3 01/08/2018 Mon NaN ... '320180080899' 'Software'
4 01/13/2018 Sat NaN ... '320180133142' NaN
当我包含两个注释掉的 if 语句时,我得到这个错误:
TypeError: 必须是实数,不是 str
第二部分
同样,第 19 行没有 PAYEE,因为这是付款,而不是收费。
2018 年 1 月 26 日星期五,20,自动付款 - 谢谢,尼尔 沃尔特斯,XXXX-XXXXXX-XXXXX,,,-347.52,,,,,,'320180260752306017',
我知道这一行在 data.head(20) 中显示为 NaN,所以我想知道如何测试它是否为 null 或 NaN。当我列出 dtypes 时,它表明 Payee 是一个对象(不是浮点数)。对我来说,这只是一个字符串字段,但我想那是一个对象。
#This test works
print("Test2", dfAmexGold['Payee'][19])
if (math.isnan( dfAmexGold['Payee'][19])):
print("found a NAN value")
print("Test1", dfAmexGold['Payee'][20])
if (math.isnan( dfAmexGold['Payee'][20])):
print("found a NAN value")
第 20 行的测试结果如下:
TypeError: 必须是实数,不是 str
问题是如何对单个项目进行 If 测试,以及为什么对空单元格使用 Null 而不是 NaN 不一致。
我也尝试过,但这不会将该行显示为 NULL(但也不会爆炸)。 如果 dfAmexGold['Payee'][19] 为无: print("找到一个 NULL 值")
【问题讨论】:
标签: python-3.x pandas csv