যে str
অ্যাক্সেসরের pandas.Series
বস্তুর জন্য উপলব্ধ dtype == object
তা আসলে একটি পুনরাবৃত্ত।
ধরুন pandas.DataFrame
df
:
df = pd.DataFrame(dict(col=[*zip('abcdefghij', range(10, 101, 10))]))
df
col
0 (a, 10)
1 (b, 20)
2 (c, 30)
3 (d, 40)
4 (e, 50)
5 (f, 60)
6 (g, 70)
7 (h, 80)
8 (i, 90)
9 (j, 100)
এটি যদি পুনরাবৃত্তিযোগ্য হয় তবে আমরা পরীক্ষা করতে পারি
from collections import Iterable
isinstance(df.col.str, Iterable)
True
এরপরে আমরা অন্যটি পুনরাবৃত্ত করার মতো করে এর থেকে নির্ধারণ করতে পারি:
var0, var1 = 'xy'
print(var0, var1)
x y
সহজ সমাধান
সুতরাং এক লাইনে আমরা উভয় কলাম নির্ধারণ করতে পারি
df['a'], df['b'] = df.col.str
df
col a b
0 (a, 10) a 10
1 (b, 20) b 20
2 (c, 30) c 30
3 (d, 40) d 40
4 (e, 50) e 50
5 (f, 60) f 60
6 (g, 70) g 70
7 (h, 80) h 80
8 (i, 90) i 90
9 (j, 100) j 100
দ্রুত সমাধান
কেবল কিছুটা আরও জটিল, আমরা zip
একই ধরণের পুনরাবৃত্তি তৈরি করতে ব্যবহার করতে পারি
df['c'], df['d'] = zip(*df.col)
df
col a b c d
0 (a, 10) a 10 a 10
1 (b, 20) b 20 b 20
2 (c, 30) c 30 c 30
3 (d, 40) d 40 d 40
4 (e, 50) e 50 e 50
5 (f, 60) f 60 f 60
6 (g, 70) g 70 g 70
7 (h, 80) h 80 h 80
8 (i, 90) i 90 i 90
9 (j, 100) j 100 j 100
সারিতে
অর্থ, বিদ্যমান রূপান্তর করবেন না df
এটি কাজ করে কারণ মূলশব্দটি assign
নতুন (বা বিদ্যমান) কলামের নাম এবং মানগুলি নতুন কলামের মান হবে key আপনি একটি অভিধান ব্যবহার করতে পারেন এবং এটি আনপ্যাক করতে **
এবং এটি কীওয়ার্ড আর্গুমেন্ট হিসাবে কাজ করতে পারেন । সুতরাং এটি একটি নতুন কলামের নামকরণের একটি চতুর উপায় 'g'
যা df.col.str
পুনরাবৃত্তির প্রথম আইটেম এবং এটি পুনরাবৃত্তির 'h'
দ্বিতীয় আইটেম df.col.str
।
df.assign(**dict(zip('gh', df.col.str)))
col g h
0 (a, 10) a 10
1 (b, 20) b 20
2 (c, 30) c 30
3 (d, 40) d 40
4 (e, 50) e 50
5 (f, 60) f 60
6 (g, 70) g 70
7 (h, 80) h 80
8 (i, 90) i 90
9 (j, 100) j 100
আমার সংস্করণ list
পদ্ধতির
আধুনিক তালিকা অনুধাবন এবং পরিবর্তনশীল আনপ্যাকিং সহ With
দ্রষ্টব্য: এছাড়াও ইনলাইন ব্যবহারjoin
df.join(pd.DataFrame([*df.col], df.index, [*'ef']))
col g h
0 (a, 10) a 10
1 (b, 20) b 20
2 (c, 30) c 30
3 (d, 40) d 40
4 (e, 50) e 50
5 (f, 60) f 60
6 (g, 70) g 70
7 (h, 80) h 80
8 (i, 90) i 90
9 (j, 100) j 100
পরিবর্তিত সংস্করণ হবে
df[['e', 'f']] = pd.DataFrame([*df.col], df.index)
নিষ্পাপ সময় পরীক্ষা
সংক্ষিপ্ত ডাটাফ্রেম
উপরে বর্ণিত একটি ব্যবহার করুন
%timeit df.assign(**dict(zip('gh', df.col.str)))
%timeit df.assign(**dict(zip('gh', zip(*df.col))))
%timeit df.join(pd.DataFrame([*df.col], df.index, [*'gh']))
1.16 ms ± 21.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
635 µs ± 18.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
795 µs ± 42.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
দীর্ঘ ডেটাফ্রেম
10 ^ 3 গুণ বড়
df = pd.concat([df] * 1000, ignore_index=True)
%timeit df.assign(**dict(zip('gh', df.col.str)))
%timeit df.assign(**dict(zip('gh', zip(*df.col))))
%timeit df.join(pd.DataFrame([*df.col], df.index, [*'gh']))
11.4 ms ± 1.53 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.1 ms ± 41.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.33 ms ± 35.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)