如何将Pandas中的DataFrame从df1格式转换为df2格式?
解决方法
要实现从df1到df2的转换,核心是把前两列的空格分隔字符串拆分成独立行,同时让年份列对应重复。这里有个简洁的实现方式:
首先给df1补全列名(你初始化时未指定列名,先补上方便后续操作),然后拆分字符串为列表,再用explode方法同时展开两列,最后调整数据类型和列名即可:
import pandas as pd df1 = pd.DataFrame([['a b c', '1 2 3', 2011], ['d e f', '4 5 6', 2012]]) # 设置列名 df1.columns = ['col1', 'col2', 'year'] # 将前两列的空格分隔字符串拆分为列表 df1['col1'] = df1['col1'].str.split() df1['col2'] = df1['col2'].str.split() # 同时展开两列并重置索引 df2 = df1.explode(['col1', 'col2']).reset_index(drop=True) # 将第二列转为整数类型 df2['col2'] = df2['col2'].astype(int) # 重命名列到目标格式 df2.columns = ['a', 'b', 'c'] print(df2)
运行后会得到目标df2结构:
a b c 0 a 1 2011 1 b 2 2011 2 c 3 2011 3 d 4 2012 4 e 5 2012 5 f 6 2012
补充说明
str.split()默认按空格拆分字符串,返回列表格式的列值;explode(['col1', 'col2'])会把每行的列表元素拆成独立行,且保证两列的元素一一对应;- 最后转换类型是因为拆分后的第二列是字符串格式,需要转为整数匹配df2的要求。
内容的提问来源于stack exchange,提问作者xinxin
相关产品推荐
相关产品推荐

