pandas 将excel中的一列文本数据拆分成多列 如何操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas 将excel中的一列文本数据拆分成多列 如何操作相关的知识,希望对你有一定的参考价值。

例如如何把如下C列短期劳务 拆分成两列 短期劳务 和 短期 ,意思是取c列的字符的前两位生成新的一列。多谢

参考技术A 假设c列第一组数据在C2,则在d2手动输入短期,在E2输入劳务。选中D2和E2,下拉,然后在最后一个格子旁边,有填充选项,选择快速填充,就可以了。C列的数据会自动被拆分成两列在D和E里。 参考技术B 选择该列列号(选中整列)——“数据”菜单——分列——按固定宽度——下一步——在标尺上需要的位置分别点击一次(自动显示出分隔线)——完成。 参考技术C D1=LEFT(C1,2)

将分组后列的多个值合并为python pandas中的一列

【中文标题】将分组后列的多个值合并为python pandas中的一列【英文标题】:Merge multiple values of a column after group by into one column in python pandas 【发布时间】:2020-07-02 09:10:56 【问题描述】:

我正在寻找与此线程中类似的任务:Merge multiple column values into one column in python pandas

但不同的是,我想创建一个新列,在按另一列分组后合并一列中的所有非空值。这是一个玩具示例:

df= pd.DataFrame('ID1' : [1,1,2,2,3,3,3],'ID2' : ['a','a','b','b','c','c','c'],
             'Status' : pd.Series([np.nan,'1', np.nan,'1','2',np.nan,'1'], 
                                  dtype="category"))

 df
Out[74]: 
     ID1 ID2 Status
 0    1   a    NaN
 1    1   a      1
 2    2   b    NaN
 3    2   b      1
 4    3   c      2
 5    3   c    NaN
 6    3   c      1

然后我想groupbyID1ID2

gr = df.groupby(['ID1','ID2'])

然后,我希望我的结果如下所示:

Out:
   NewCol
0   1
1   1
2   2,1

所以它是一个新的DataFrame,其中包含Status 列的non-null 值,该列按ID1ID2 分组。

提前致谢。

【问题讨论】:

【参考方案1】:

使用 GroupBy.agg 和 lambda 函数是最通用的解决方案:

df1 = df.groupby(['ID1','ID2'])['Status'].agg(lambda x: ','.join(x.dropna())).reset_index()
print (df1)
   ID1 ID2 Status
0    1   a      1
1    2   b      1
2    3   c    2,1

另一个想法是在第一步中删除重复的,但是如果某个组只有错误值,它会从输出中删除,所以接下来的处理是必要的,比如merge

#first group with only NaNs
df= pd.DataFrame('ID1' : [1,1,2,2,3,3,3],'ID2' : ['a','a','b','b','c','c','c'],
             'Status' : pd.Series([np.nan,np.nan, np.nan,'1','2',np.nan,'1'], 
                                  dtype="category"))


#first group is dropped
df11 = (df.dropna(subset=['Status'])
          .groupby(['ID1','ID2'])['Status']
          .agg(','.join)
          .reset_index())
print (df11)
   ID1 ID2 Status
0    2   b      1
1    3   c    2,1

#added missing pairs and `NaN`s converted to empty strings:
df2 = df.drop_duplicates(['ID1','ID2'])[['ID1','ID2']].merge(df11, how='left').fillna('')
print (df2)
   ID1 ID2 Status
0    1   a       
1    2   b      1
2    3   c    2,1

第一个解决方案:

df1 = df.groupby(['ID1','ID2'])['Status'].agg(lambda x: ','.join(x.dropna())).reset_index()
print (df1)
   ID1 ID2 Status
0    1   a       
1    2   b      1
2    3   c    2,1

【讨论】:

是的,完全正确。非常感谢。

以上是关于pandas 将excel中的一列文本数据拆分成多列 如何操作的主要内容,如果未能解决你的问题,请参考以下文章

Pandas: 如何将一列中的文本拆分为多行? | Python

excel2013使用分列功能拆分数据

python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?

Python - 正则表达式将数据框中的一列拆分为 2 [重复]

Excel中的一列数据变成文本的一行数据

Pandas Dataframe:如何将一列拆分为多个单热编码列[重复]