গৃহীত সমাধানটি প্রচুর ডেটার জন্য অত্যন্ত ধীর হতে চলেছে। সর্বাধিক সংখ্যক উর্ধ্বতন সহ সমাধানটি পড়া খুব কঠিন এবং সংখ্যার ডেটা সহ ধীর। যদি প্রতিটি নতুন কলাম অন্যের থেকে স্বতন্ত্রভাবে গণনা করা যায় তবে আমি কেবল তাদের ব্যবহার না করে প্রত্যেকে সরাসরি নিয়োগ করবapply
।
নকল চরিত্রের ডেটা সহ উদাহরণ
ডেটা ফ্রেমে 100,000 স্ট্রিং তৈরি করুন
df = pd.DataFrame(np.random.choice(['he jumped', 'she ran', 'they hiked'],
size=100000, replace=True),
columns=['words'])
df.head()
words
0 she ran
1 she ran
2 they hiked
3 they hiked
4 they hiked
আসুন ধরা যাক আমরা মূল প্রশ্নের মতো কিছু পাঠ্য বৈশিষ্ট্য বের করতে চেয়েছিলাম। উদাহরণস্বরূপ, আসুন প্রথম অক্ষরটি বের করুন, 'ই' বর্ণটির উপস্থিতি গণনা করুন এবং বাক্যাংশটি মূলধন করুন।
df['first'] = df['words'].str[0]
df['count_e'] = df['words'].str.count('e')
df['cap'] = df['words'].str.capitalize()
df.head()
words first count_e cap
0 she ran s 1 She ran
1 she ran s 1 She ran
2 they hiked t 2 They hiked
3 they hiked t 2 They hiked
4 they hiked t 2 They hiked
সময়
%%timeit
df['first'] = df['words'].str[0]
df['count_e'] = df['words'].str.count('e')
df['cap'] = df['words'].str.capitalize()
127 ms ± 585 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
def extract_text_features(x):
return x[0], x.count('e'), x.capitalize()
%timeit df['first'], df['count_e'], df['cap'] = zip(*df['words'].apply(extract_text_features))
101 ms ± 2.96 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
আশ্চর্যজনকভাবে, আপনি প্রতিটি মান দিয়ে লুপ করে আরও ভাল পারফরম্যান্স পেতে পারেন
%%timeit
a,b,c = [], [], []
for s in df['words']:
a.append(s[0]), b.append(s.count('e')), c.append(s.capitalize())
df['first'] = a
df['count_e'] = b
df['cap'] = c
79.1 ms ± 294 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
জাল সংখ্যাযুক্ত ডেটা সহ আরও একটি উদাহরণ
1 মিলিয়ন এলোমেলো সংখ্যা তৈরি করুন এবং powers
উপরে থেকে কার্যটি পরীক্ষা করুন ।
df = pd.DataFrame(np.random.rand(1000000), columns=['num'])
def powers(x):
return x, x**2, x**3, x**4, x**5, x**6
%%timeit
df['p1'], df['p2'], df['p3'], df['p4'], df['p5'], df['p6'] = \
zip(*df['num'].map(powers))
1.35 s ± 83.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
প্রতিটি কলামটি নির্ধারণ করা 25x দ্রুত এবং খুব পঠনযোগ্য:
%%timeit
df['p1'] = df['num'] ** 1
df['p2'] = df['num'] ** 2
df['p3'] = df['num'] ** 3
df['p4'] = df['num'] ** 4
df['p5'] = df['num'] ** 5
df['p6'] = df['num'] ** 6
51.6 ms ± 1.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
আমি কেন সাধারণত যাওয়ার পথে হয় না তা এখানে আরও বিশদ সহ একই রকম প্রতিক্রিয়া জানিয়েছিলাম apply
।
df.ix[: ,10:16]
। আমি মনে করি আপনারmerge
ডেটাসেটে আপনার বৈশিষ্ট্য থাকবে ।