我有一个函数我写的从2D列表中删除列(从CSV上传):
#method to remove a column from a list if it does not contain an int
def remove_nonint(list):
for row in list:
for i in range(0, len(row)):
if isinstance(row[i], ( int, long ) ) != True:
del row[i]
Run Code Online (Sandbox Code Playgroud)
但是,当我在列表上运行它时,我收到以下错误:
<ipython-input-23-10a39a11efb3> in remove_nonint(list)
3 for row in list:
4 for i in range(0, len(row)):
----> 5 if isinstance(row[i], ( int, long ) ) != True:
6 del row[i]
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
list [0]看起来像这样:
{u'2B': 0,
u'3B': 0,
u'AB': 4,
u'BB': 0,
u'CS': 0,
u'G': 1,
u'GIDP': None,
u'H': 0,
u'HBP': None,
u'HR': 0,
u'IBB': None,
u'R': 0,
u'RBI': 0,
u'SB': 0,
u'SF': None,
u'SH': None,
u'SO': 0,
u'lgID': u'NA',
u'playerID': u'abercda01',
u'stint': u'1',
u'teamID': u'TRO',
u'yearID': u'1871'}
Run Code Online (Sandbox Code Playgroud)
编辑:这是我上传CSV的方式:
import unicodecsv
with open('lahman-csv_2015-01-24/batting.csv', 'rb') as f:
reader = unicodecsv.DictReader(f)
batting = list(reader)
batting[0]
Run Code Online (Sandbox Code Playgroud)
row 是一个字典,而不是一个列表,所以它不一定在索引0处有任何东西.在这种情况下,如你所见,它没有.
迭代dict的通常方法是
for key in some_dict:
或者
for key, val in some_dict.items():
如果您希望检查存储在的值key,并且您希望给它命名而不是引用some_dict [val],则后一种形式很有用,这可能很麻烦.
在这种情况下,我会做这样的事情:
for row in list:
for key, val in row.items():
if not isinstance(val, ( int, long ) ):
del row[key]
Run Code Online (Sandbox Code Playgroud)