එය බොහෝ කාලයක් ගතවී ඇත, නමුත් මම ද එම ගැටලුවට මුහුණ දුන්නෙමි. මෙහි රසවත් පිළිතුරු රාශියක් හමු විය. එබැවින් කුමන ක්රමයක් භාවිතා කළ යුතුදැයි මට ව්යාකූල විය.
දත්ත රාමුවට පේළි ගොඩක් එකතු කිරීමේදී මම වේගවත් ක්රියාකාරිත්වය ගැන උනන්දු වෙමි . එබැවින් මම වඩාත් ජනප්රිය ක්රම 4 ක් උත්සාහ කර ඒවායේ වේගය පරීක්ෂා කළෙමි.
නව පැකේජ භාවිතා කරමින් 2019 දී යාවත්කාලීන කරන ලදි . OoFooBar අදහස් දැක්වීමෙන් පසුවද යාවත්කාලීන කරන ලදි
වේගවත් කාර්ය සාධනය
- .Append භාවිතා කිරීම ( NPE හි පිළිතුර )
- .Loc භාවිතා කිරීම (ෆ්රෙඩ්ගේ පිළිතුර )
- පූර්ව වෙන් කිරීම සමඟ .loc භාවිතා කිරීම ( ෆූබාර්ගේ පිළිතුර )
- ඩික්ට් භාවිතා කර අවසානයේ ඩේටා ෆ්රේම් සාදන්න ( ශිඛාර්දුවාගේ පිළිතුර )
ප්රති Results ල (තත්පර වලින්):
|------------|-------------|-------------|-------------|
| Approach | 1000 rows | 5000 rows | 10 000 rows |
|------------|-------------|-------------|-------------|
| .append | 0.69 | 3.39 | 6.78 |
|------------|-------------|-------------|-------------|
| .loc w/o | 0.74 | 3.90 | 8.35 |
| prealloc | | | |
|------------|-------------|-------------|-------------|
| .loc with | 0.24 | 2.58 | 8.70 |
| prealloc | | | |
|------------|-------------|-------------|-------------|
| dict | 0.012 | 0.046 | 0.084 |
|------------|-------------|-------------|-------------|
ප්රයෝජනවත් අදහස් දැක්වීම සඳහා rasskrassowski ටද ස්තූතියි - මම කේතය යාවත්කාලීන කළෙමි.
ඒ නිසා මම ශබ්ද කෝෂය හරහා එකතු කිරීම් භාවිතා කරමි.
කේතය:
import pandas as pd
import numpy as np
import time
del df1, df2, df3, df4
numOfRows = 1000
# append
startTime = time.perf_counter()
df1 = pd.DataFrame(np.random.randint(100, size=(5,5)), columns=['A', 'B', 'C', 'D', 'E'])
for i in range( 1,numOfRows-4):
df1 = df1.append( dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E']), ignore_index=True)
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df1.shape)
# .loc w/o prealloc
startTime = time.perf_counter()
df2 = pd.DataFrame(np.random.randint(100, size=(5,5)), columns=['A', 'B', 'C', 'D', 'E'])
for i in range( 1,numOfRows):
df2.loc[i] = np.random.randint(100, size=(1,5))[0]
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df2.shape)
# .loc with prealloc
df3 = pd.DataFrame(index=np.arange(0, numOfRows), columns=['A', 'B', 'C', 'D', 'E'] )
startTime = time.perf_counter()
for i in range( 1,numOfRows):
df3.loc[i] = np.random.randint(100, size=(1,5))[0]
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df3.shape)
# dict
startTime = time.perf_counter()
row_list = []
for i in range (0,5):
row_list.append(dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E']))
for i in range( 1,numOfRows-4):
dict1 = dict( (a,np.random.randint(100)) for a in ['A','B','C','D','E'])
row_list.append(dict1)
df4 = pd.DataFrame(row_list, columns=['A','B','C','D','E'])
print('Elapsed time: {:6.3f} seconds for {:d} rows'.format(time.perf_counter() - startTime, numOfRows))
print(df4.shape)
PS මම විශ්වාස කරනවා, මගේ අවබෝධය පරිපූර්ණ නොවේ, සමහර විට යම් ප්රශස්තිකරණයක් තිබිය හැකිය.