gpt4 book ai didi

python - 将列表转换为数据框时如何优化时间?

转载 作者:行者123 更新时间:2023-12-04 03:25:31 25 4
gpt4 key购买 nike

根据我之前的问题,How to fill the values in the list and convert it into the dataframe?

这可行,但对于大量数据会花费大量时间。

例如,我有一个数据框:

Id  Name  Photo1  Photo2
1 Mark 1.jpg 2.jpg
2 Julia 1.jpg
3 Andy 1.jpg 2.jpg

我试过:

import pandas as pd

df = pd.read_csv('PyCharmProjects/book1.csv')

df1 = df.reindex(['I','Id','Name','P','46','N','Photo1','Photo2','PH'],axis=1)
df1['I'] = df1['I'].fillna('I')
df1['P'] = df1['P'].fillna('P')
df1['46'] = df1['46'].fillna('46')
df1['N'] = df1['N'].fillna('N')
df1['PH'] = df1['PH'].fillna('PH')
df1 = df1.astype(str)

vals = [['I','Id'],['N','Name'],['P','46']]

photo_df = df1.fillna('').filter(like='Photo')

vals = [(i, y) for i, x in enumerate(photo_df.to_numpy())
for y in vals[:2] +[['PH',z]
for z in photo_df.columns[x!='']] +vals[2:]]

L = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals]

df1 = pd.concat(L)

df1

结果显示为:

I     1
Name Mark
PH 1.jpg
PH 2.jpg
P 46
I 2
Name Julia
PH 1.jpg
P 46
I 3
Name Andy
PH 1.jpg
PH 2.jpg
P 46

这很好用,但是当我尝试处理大型数据集时,这会花费大量时间。

这一行要花很多时间:

L = [df1.loc[df1.index[[i]], x].set_axis(range(len(x)), axis=1) for i, x in vals]

任何减少时间的想法或任何替代方法。

最佳答案

out = (df.assign(P=46)
.stack(dropna=False)
.reset_index(level=-1)
.set_axis([0, 1], axis=1)
.replace({0: {"Id": "I", "Name": "N", r"^Photo\d+$": "PH"}}, regex=True))

我们首先分配一个值为46的列P,然后堆叠它同时保持NaN,即,列在索引旁边,然后 reset_index 最后一级,即新出现的列成为它们自己的列,然后 set_axis 命名为 0, 1 的列。最后,在 0 列中执行所需的替换,将 "ID" 替换为 "I"

得到

    0      1
0 I 1
0 N Mark
0 PH 1.jpg
0 PH 2.jpg
0 P 46
1 I 2
1 N Julia
1 PH 1.jpg
1 PH None
1 P 46
2 I 3
2 N Andy
2 PH 1.jpg
2 PH 2.jpg
2 P 46

关于python - 将列表转换为数据框时如何优化时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67682496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com