我正在对一些最慢的代码进行时间测试,并隔离出了耗时最长的代码段。
此代码段从列表中获取数据并将其存储到df中。我知道for循环与大熊猫互动时是个忌讳,所以我想知道是否可以加快速度。
我有一个所有“问题”的列表,除了遍历外部for循环并使用内部for循环将每个问题插入df外,我别无选择:
for issues in all_issues:
# Some code to get the current key of the issue to use in df.loc to insert in the right place
# Some code to get and append each issue's data to a list named (to_status)
for i in range(len(to_status)):
df.loc[key, ('T' + str(i + 1) + ' - To')] = to_status[i]
列表到底是什么并不重要,实际上我使用的是几个不同的列表。尽管它们的长度可以变化,所以需要range(len(to_status))
。
如果列表为['Open','Closed','Open']
,键为4000
,则输出为:
df
key T1 - To T2 - To T3 - To
4000 'Open' 'Closed' 'Open'
谢谢。
答案 0 :(得分:1)
代替循环,我建议直接从列表中构造一个DataFrame。然后根据需要手动调整列名称和索引。像这样:
df = pd.DataFrame.from_records(all_issues)
df.columns = ['T' + str(c+1) + ' - To' for c in df.columns]
答案 1 :(得分:1)
由于没有示例数据,所以我假设您的数据集与此类似,即键和值作为列表。
d={
'key1': [10, 100.1, 0.98, 1.2],
'key2': [72.5],
'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7]
}
df=pd.DataFrame.from_dict(d,orient='index').transpose()
输出:
key3 key2 key1
0 1.00 72.5 10.00
1 5.20 NaN 100.10
2 71.20 NaN 0.98
3 9.00 NaN 1.20
4 10.11 NaN NaN