这里的Python新手 - 无法在网上找到类似的东西。
我正在尝试分析包含许多具有不同列长度的行的大型数据集。我的数据的一个例子可能是:" LY R15 515 750 601 999"其中每行的元素数量不同。我希望列变量引用每个后续元素,但仅限于该元素存在。我稍后将使用带有数值表达式的if语句的所有列变量。
data = 'LY R15 515 750 601 999'
remove_blanks = ['']
entries = data.split()
''.join([i for i in entries if i not in remove_blanks])
trash = (entries[0], entries[1])
time = int(entries[2])
column_1 = int(entries[3])
column_2 = int(entries[4])
column_3 = int(entries[5])
column_4 = int(entries[6])
column_5 = int(entries[7])
column_6 = int(entries[8])
column_7 = int(entries[9])
column_8 = int(entries[10])
column_9 = int(entries[11])
column_10 = int(entries[12])
column_11 = int(entries[13])
column_12 = int(entries[14])
column_13 = int(entries[15])
column_14 = int(entries[16])
column_15 = int(entries[17])
column_16 = int(entries[18])
column_17 = int(entries[19])
column_18 = int(entries[20])
print(entries)
我收到的错误:
column_3 = int(entries [5])
IndexError:列表索引超出范围
我知道它正在发生,因为列表中不存在该元素。基本上,如果一个元素不存在,我不希望考虑该变量。请帮忙!
P.S。我确信有一个更简单的方法来写这个,所以如果有,请告诉我!
答案 0 :(得分:0)
将变量命名为column_1
到column_18
并不是很方便。
而不是
column_1 = int(entries[3])
column_2 = int(entries[4])
column_3 = int(entries[5])
... etc, etc ...
考虑
column = [None] + [int(v) for v in entries[3:]]
然后使用column[3]
代替column_3
。
[None] +
是一个闪避来获取列表下标(基于零)以匹配您的变量名称,这些名称是从1开始的。
答案 1 :(得分:0)
字典可能可以完成工作
variables = {}
for ix, value in enumerate(entries[3:]):
variables["column_{0}".format(ix)] = int(value)
你得到了
{'column_1': 601, 'column_0': 750, 'column_2': 999}
但是,使用像pandas这样的包进行数据分析会更容易