因此我的数据框由50万行/ 3列组成,并基于此我想创建一个json文件
jsonFile = {
"attribute1": [
{
"key1": "a",
"key2": "b",
"key3": c
},
{
"key1": "d",
"key2": "e",
"key3": f
},
(...)
]
}
这样做
jsonFile['attribute1'] = []
for i in range(0,len(df)):
jsonFile['attribute1'].append({
"key1": df["col1"][i],
"key2": df["col2"][i],
"key3": df["col3"][i]
})
花费的时间太长。我读了一些有关Numpy Vectorization的内容,但不知道这是否适用于我的情况,因为在我看到的所有示例中,都使用该方法添加了新列。
答案 0 :(得分:4)
您应该避免对数据帧使用Python for
循环。
在这种情况下,您可以使用.rename
重命名列,然后将.to_dict
与orient='records'
一起使用:
df = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4, 5, 6]})
output = {'attribute1': df.rename(columns={'col1': 'key1', 'col2': 'key2'}).to_dict(orient='records')}
print(output)
将输出
{'attribute1': [{'col1': 1, 'col2': 4}, {'col1': 2, 'col2': 5}, {'col1': 3, 'col2': 6}]}
使用上述方法检查50万行的计时快约12倍:
from timeit import Timer
df = pd.DataFrame({'col1': list(range(500000)), 'col2': list(range(500000))})
def rename_and_to_dict():
{'attribute1': df.rename(columns={'col1': 'key1', 'col2': 'key2'}).to_dict(orient='records')}
def for_loop():
output = {'attribute1': []}
for i in range(0, len(df)):
output['attribute1'].append({
"key1": df["col1"][i],
"key2": df["col2"][i]
})
print('rename_and_to_dict', min(Timer(rename_and_to_dict).repeat(1, 1)))
print('for_loop', min(Timer(for_loop).repeat(1, 1)))
输出
rename_and_to_dict 0.3934917000000001
for_loop 4.469996500000001