Home > Mobile >  How to split a column in many different columns?
How to split a column in many different columns?

Time:12-06

I have a dataset and in one of it columns I have many values that I want to convert to new columns:

"{'availabilities': {'bikes': 4, 'stands': 28, 'mechanicalBikes': 4, 'electricalBikes': 0, 'electricalInternalBatteryBikes': 0, 'electricalRemovableBatteryBikes': 0}, 'capacity': 32}"

I tried to use str.split() and received the error because of the patterns.

bikes_table_ready[['availabilities',
                   'bikes',
                   'stands',
                   'mechanicalBikes',
                   'electricalBikes',
                   'electricalInternalBatteryBikes',
                   'electricalRemovableBatteryBikes',
                   'capacity']]= bikes_table_ready.totalStands.str.extract('{.}', expand=True)

ValueError: pattern contains no capture groups

Wich patterns should I use to have it done?

CodePudding user response:

Welcome to Stack Overflow! Please provide a minimal reproducible example demonstrating the problem. To learn more about this community and how we can help you, please start with the tour and read How to Ask and its linked resources.

That being said, it seems that the data you are trying to use the method str.split() is not actually a string. Check this to find more about data types. It seems you are trying to retrieve the information from a Python List "[xxx] Or Dictionary "dicName{"Key":"value}". If that's the case, try checking this link which talks about how to use Python Lists or this which talks about dictionaries.

CodePudding user response:

IIUC, use ast.literal_eval with pandas.json_normalize.

With a dataframe df with two columns (id) and the column to be splitted (col), it gives this :

import ast
​
df["col"] = df["col"].apply(lambda x: ast.literal_eval(x.strip('"')))
​
out = df.join(pd.json_normalize(df.pop("col").str["availabilities"]))

# Output :

print(out.to_string())
      id  bikes  stands  mechanicalBikes  electricalBikes  electricalInternalBatteryBikes  electricalRemovableBatteryBikes
0  id001      4      28                4                0                               0                                0
  • Related