Python 使用pandas:criteria最佳性能在数据帧中追加空行 要求:将空行添加到数据帧 约束:性能
这将起作用并向数据帧追加一个空行,但当使用%lprun-f进行检查时,loc分配操作占用了90%的时间Python 使用pandas:criteria最佳性能在数据帧中追加空行 要求:将空行添加到数据帧 约束:性能,python,pandas,Python,Pandas,这将起作用并向数据帧追加一个空行,但当使用%lprun-f进行检查时,loc分配操作占用了90%的时间 我必须在同一操作中执行更多3k时间(在其他类似3k数据帧上) 仅考虑性能,如何提高性能 由于您没有提供有关输入数据帧的任何详细信息,因此我根据我的假设进行回答。您可以尝试使用pandas.DataFrame.reindex(),如下所示: import pandas as pd if __name__ == '__main__': # dataframe is onedf
由于您没有提供有关输入数据帧的任何详细信息,因此我根据我的假设进行回答。您可以尝试使用pandas.DataFrame.reindex(),如下所示:
import pandas as pd
if __name__ == '__main__':
# dataframe is onedf
onedf = pd.DataFrame(columns=["c0", "c1"])
onedf = onedf.reindex(onedf.index.tolist() + list(range(0, 20)))
print(onedf)
结果:
c0 c1
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 NaN NaN
10 NaN NaN
11 NaN NaN
12 NaN NaN
13 NaN NaN
14 NaN NaN
15 NaN NaN
16 NaN NaN
17 NaN NaN
18 NaN NaN
19 NaN NaN
由于您没有提供有关输入数据帧的任何详细信息,因此我将根据我的假设进行回答。您可以尝试使用pandas.DataFrame.reindex(),如下所示:
import pandas as pd
if __name__ == '__main__':
# dataframe is onedf
onedf = pd.DataFrame(columns=["c0", "c1"])
onedf = onedf.reindex(onedf.index.tolist() + list(range(0, 20)))
print(onedf)
结果:
c0 c1
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 NaN NaN
10 NaN NaN
11 NaN NaN
12 NaN NaN
13 NaN NaN
14 NaN NaN
15 NaN NaN
16 NaN NaN
17 NaN NaN
18 NaN NaN
19 NaN NaN
在熊猫中的附加操作成本很高。您可以做的是将dataframe转换为字典列表,然后将temp附加到字典的python列表中。 处理后,将字典列表转换回数据帧
onedf_new = pd.DataFrame(dict1)
例如,假设我有这样一个数据帧onedf-
| | product | old_price | new_price | final_price |
|---|----------|-----------|-----------|-------------|
| 0 | product1 | 10 | 20.0 | 10.0 |
| 1 | product2 | 20 | 10.0 | -10.0 |
| 2 | product3 | 30 | NaN | NaN |
| 3 | product4 | 40 | NaN | NaN |
现在,您希望将行附加到该字典中,因此首先将其转换为字典列表-
dict1 = onedf.to_dict(orient='records')
这将产生这样的输出-
[{'product': 'product1',
'old_price': 10,
'new_price': 20.0,
'final_price': 10.0},
{'product': 'product2',
'old_price': 20,
'new_price': 10.0,
'final_price': -10.0},
{'product': 'product3',
'old_price': 30,
'new_price': nan,
'final_price': nan},
{'product': 'product4',
'old_price': 40,
'new_price': nan,
'final_price': nan}]
现在,只需创建一个与相同格式匹配的空dict并追加。这样做会快得多
import numpy as np
temp_false_list = [np.nan for _ in range(4)]
temp_dict = dict(zip(onedf.columns.values,temp_false_list))
# {'product': nan, 'old_price': nan, 'new_price': nan, 'final_price': nan}
将它附加到我们以前创建的dict中-
dict1.append(temp_dict)
最后,将dict1转换回数据帧
onedf_new = pd.DataFrame(dict1)
在熊猫中的附加操作成本很高。您可以做的是将dataframe转换为字典列表,然后将temp附加到字典的python列表中。 处理后,将字典列表转换回数据帧
onedf_new = pd.DataFrame(dict1)
例如,假设我有这样一个数据帧onedf-
| | product | old_price | new_price | final_price |
|---|----------|-----------|-----------|-------------|
| 0 | product1 | 10 | 20.0 | 10.0 |
| 1 | product2 | 20 | 10.0 | -10.0 |
| 2 | product3 | 30 | NaN | NaN |
| 3 | product4 | 40 | NaN | NaN |
现在,您希望将行附加到该字典中,因此首先将其转换为字典列表-
dict1 = onedf.to_dict(orient='records')
这将产生这样的输出-
[{'product': 'product1',
'old_price': 10,
'new_price': 20.0,
'final_price': 10.0},
{'product': 'product2',
'old_price': 20,
'new_price': 10.0,
'final_price': -10.0},
{'product': 'product3',
'old_price': 30,
'new_price': nan,
'final_price': nan},
{'product': 'product4',
'old_price': 40,
'new_price': nan,
'final_price': nan}]
现在,只需创建一个与相同格式匹配的空dict并追加。这样做会快得多
import numpy as np
temp_false_list = [np.nan for _ in range(4)]
temp_dict = dict(zip(onedf.columns.values,temp_false_list))
# {'product': nan, 'old_price': nan, 'new_price': nan, 'final_price': nan}
将它附加到我们以前创建的dict中-
dict1.append(temp_dict)
最后,将dict1转换回数据帧
onedf_new = pd.DataFrame(dict1)
附加空行的条件是什么?如果是的话,为什么不创建一个包含一行数据的临时数据框,并仅连接到现有数据框?附加空行的标准是什么?如果是的话,为什么不创建一个包含一行数据的临时数据框,然后只连接到现有的数据框呢?为了更清楚,我已经修改了这个问题。请检查,为了更清楚,我已经修改了问题。请检查,不确定这是否适用于3k数据帧。我认为您正在为同一数据帧多次执行相同的过程:)不确定这是否适用于3k数据帧。我以为您在为同一数据帧多次执行相同的过程:)