I am aware of the following questions:
1.) How to split a column based on several string indices using pandas? 2.) How do I split text in a column into multiple rows?
I want to split these into several new columns though. Suppose I have a dataframe that looks like this:
id | string
-----------------------------
1 | astring, isa, string
2 | another, string, la
3 | 123, 232, another
I know that using:
df['string'].str.split(',')
I can split a string. But as a next step, I want to efficiently put the split string into new columns like so:
id | string_1 | string_2 | string_3
-----------------|---------------------
1 | astring | isa | string
2 | another | string | la
3 | 123 | 232 | another
---------------------------------------
I could for example do this:
for index, row in df.iterrows():
i = 0
for item in row['string'].split():
df.set_values(index, 'string_{0}'.format(i), item)
i = i + 1
But how could one achieve the same result more elegantly?a
The str.split
method has an expand
argument:
>>> df['string'].str.split(',', expand=True)
0 1 2
0 astring isa string
1 another string la
2 123 232 another
>>>
With column names:
>>> df['string'].str.split(',', expand=True).rename(columns = lambda x: "string"+str(x+1))
string1 string2 string3
0 astring isa string
1 another string la
2 123 232 another
Much neater with Python >= 3.6 f-strings:
>>> (df['string'].str.split(',', expand=True)
... .rename(columns=lambda x: f"string_{x+1}"))
string_1 string_2 string_3
0 astring isa string
1 another string la
2 123 232 another
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With