我正在尝试在python中爆炸一列。尝试了几种方法,但没有用。
输入数据框:
Column_1 Column_2 Column_3 Column_4 Column_5 ... Column_N
text text text {'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': [text]}
text text text {'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': [text]}
text text text {'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': [text]}
text text text {'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': [text]}
我需要保留每一列,但要用dict的值将column_4列与列炸开:address1,address2,依此类推。
Column_1 Column_2 Column_3 address1 address2 address3 city zip_code ...Column_N
text text text text text text text text
text text text text text text text text
text text text text text text text text
text text text text text text text text
因此,我需要保留输入数据框中的每一列,但要删除dict中的列的Column_4。
import ast
from io import StringIO
# sample data
s = """Column_1|Column_2|Column_3|Column_4
text|text|text|{'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': ['text']}
text|text|text|{'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': ['text']}
text|text|text|{'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': ['text']}
text|text|text|{'address1': 'text', 'address2': None, 'address3': '', 'city': 'text', 'zip_code': 'text', 'country': 'text', 'state': 'text', 'display_address': ['text']}"""
df = pd.read_csv(StringIO(s), sep='|')
df['Column_4'] = df['Column_4'].apply(ast.literal_eval)
# end sample data
# list comprehension and concat dataframe
con = pd.concat([pd.DataFrame(x) for x in df['Column_4'].values.tolist()]).reset_index(drop=True)
# concat list of dataframe with the original df
new_df = pd.concat([df,con], axis=1)