在python(pandas)中分解数据框中的列

问题描述 投票:-2回答:1

我正在尝试在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。

python pandas
1个回答
0
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.