যে 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)