如何将列拆分为具有某些功能的多列?
Posted
技术标签:
【中文标题】如何将列拆分为具有某些功能的多列?【英文标题】:How to split column to multiple columns with some features? 【发布时间】:2020-10-13 16:43:02 【问题描述】:我有这样的专栏
col1
(0,0):19,(1,1):155
(0,0):13,(0,1):32,(1,1):34
(0,0):56,(1,0):43,(1,1):38
(0,0):67,(0,1):45,(1,0):98,(1,1):70
我想把它分成四列:
(0,0) (0,1) (1,0) (1,1)
19 0 0 155
13 32 0 34
56 0 43 38
67 45 98 70
我试过col.str.split(',\s*(?![^()]*\))',expand=True)
,但只能得到:
col1 col2 col3 col4
(0,0):19 (1,1):155 NAN NAN
(0,0):13 (0,1):32 (1,1):34 NAN
(0,0):56 (1,0):43 (1,1):38 NAN
(0,0):67 (0,1):45 (1,0):98 (1,1):70
我想知道是否有办法获得我上面显示的内容?非常感谢! 鲲
【问题讨论】:
【参考方案1】:您可以提取(0,0)
、(0,1)
、(1,0)
和(1,1)
之后的数字,然后删除col1
列:
import pandas as pd
df = pd.DataFrame('col1': ['(0,0):19,(1,1):155','(0,0):13,(0,1):32,(1,1):34','(0,0):56,(1,0):43,(1,1):38','(0,0):67,(0,1):45,(1,0):98,(1,1):70'])
df['(0,0)'] = df['col1'].str.extract(r'\(0,0\):(\d+)', expand=False).fillna(0)
df['(0,1)'] = df['col1'].str.extract(r'\(0,1\):(\d+)', expand=False).fillna(0)
df['(1,0)'] = df['col1'].str.extract(r'\(1,0\):(\d+)', expand=False).fillna(0)
df['(1,1)'] = df['col1'].str.extract(r'\(1,1\):(\d+)', expand=False).fillna(0)
df = df.drop(columns = ['col1'])
输出:
>>> df
(0,0) (0,1) (1,0) (1,1)
0 19 0 0 155
1 13 32 0 34
2 56 0 43 38
3 67 45 98 70
【讨论】:
感谢您的回复!我也想过用这种单独的方式来做! @KunFang 当您的数据不那么规则时最方便。此外,如果有的话,您可以稍后将其调整为更复杂的情况。请注意,Quang 的代码对我有用。 理解~很奇怪,我在真实数据中尝试过,但显示如下错误:File "pandas/_libs/hashtable_class_helper.pxi", line 811, in pandas._libs.hashtable.Int64HashTable.get_item文件“pandas/_libs/hashtable_class_helper.pxi”,第 817 行,在 pandas._libs.hashtable.Int64HashTable.get_item KeyError: 1 @KunFang 那我说你贴的数据太简单了。 我错了,我输入了'.'当我输入 (',\s*(?![^()]*))',expand=True) 而不是 ',' 时,Quang 方法也有效!【参考方案2】:我使用双 str.split
和 stack/unstack
的方法:
(df.col1.str.split(',\s*(?![^()]*\))', expand=True)
.stack().str.split(':',expand=True)
.set_index([0], append=True)
.reset_index(level=1, drop=True)[1]
.unstack(fill_value=0)
)
输出:
0 (0,0) (0,1) (1,0) (1,1)
0 19 0 0 155
1 13 32 0 34
2 56 0 43 38
3 67 45 98 70
【讨论】:
感谢您的回复!但我收到一条 KeyError: 1 消息。 对不起,我发现一个错字,结果我得到错误...你的方法也有效!再次感谢!以上是关于如何将列拆分为具有某些功能的多列?的主要内容,如果未能解决你的问题,请参考以下文章