Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将单个数据帧列拆分为多个列_Python_Regex_Pandas_Dataframe_Split - Fatal编程技术网

Python 将单个数据帧列拆分为多个列

Python 将单个数据帧列拆分为多个列,python,regex,pandas,dataframe,split,Python,Regex,Pandas,Dataframe,Split,我有下面几行的数据(当然比示例中的行要多)。数据可以以不同的顺序显示。 df=pd.DataFrame({'SmVariant':['1xFBBC',float('nan'),'2xFBBA','5xABIA'\ “2xFBBC,1xFBBA”,“1xFBBA”,“4xABIA”\ '1xFBBA,1xFBBC',浮点('nan'),'1xFBBA'\ “3xFBBA,1xFBC']}) 我想分成如下数字列:(最终得到总数) 我猜你指的是熊猫数据帧。我还假设您预先知道不同类型的元素,并可以将它

我有下面几行的数据(当然比示例中的行要多)。数据可以以不同的顺序显示。

df=pd.DataFrame({'SmVariant':['1xFBBC',float('nan'),'2xFBBA','5xABIA'\
“2xFBBC,1xFBBA”,“1xFBBA”,“4xABIA”\
'1xFBBA,1xFBBC',浮点('nan'),'1xFBBA'\
“3xFBBA,1xFBC']})
我想分成如下数字列:(最终得到总数)


我猜你指的是熊猫数据帧。我还假设您预先知道不同类型的元素,并可以将它们放入字典中,就像这样(将元素映射到最后的列中:

cols={'AAAA':0, 'BBBB': 1, 'CCCC': 2}
接下来编写一个函数,将特定元素转换为多列:

def expand_element(el):
  res = [0]*len(cols)
  for item in el.split(','):
    q, name = item.split('x')
    res[cols[name]]=int(q)
  return res
最后,使用该函数并将其应用于数据帧中的每个元素,如下所示:

df.apply(lambda x: expand_element(x[0]), axis=1, result_type='expand')
这是我的交互式会话,显示输入和输出:

>>> df=pd.DataFrame({"c1": ["1xAAAA,2xBBBB", "1xAAAA,2xBBBB"]})
>>> df.apply(lambda x: expand_element(x[0]), axis=1, result_type='expand')
   0  1  2
0  1  2  0
1  1  2  0
解决方案
您可以使用
regex
+
pandas
方法链接在一行中完成此操作,如下所示。为了提高可读性,我已将其拆分为多行。有关更多详细信息,请参阅下面的部分C。欢迎使用堆栈溢出!到目前为止您尝试了什么,以及尝试中出现了哪些错误?请回答您的问题如果您有任何问题,请加入@Wayne_AB。我希望这会有所帮助。谢谢。我会在有时间的时候研究解决方案。您能解释一下正则表达式吗?@Wayne_AB我在解决方案中添加了两个示例:第一个示例将逐步解释第一个模式,第二个示例(这是第一个版本的更简洁和通用的版本),将解释其中的每个步骤。这里有一个更好的示例数据:df=pd.DataFrame({'SmVariant':['1xFBBC',float('nan'),'2xFBBA','5xbabia','2xFBBC,1xFBBA','4xbabia','1xFBBA','1xFBBA',float('nan),'1xFBBA',\'3xFBBA,1xFBBC']})谢谢。我110%被这个回复吓坏了。我是一名电子工程师,多年来没有做过任何编码。我在很多个月前开始使用Pascal,最近使用的VisualBasic对我来说太弱和过时了。这是一个非常好的资源,我非常感谢。谢谢CypherX。这看起来很有趣。我想保留“AAAA”、“BBBB”等标题。
>>> df=pd.DataFrame({"c1": ["1xAAAA,2xBBBB", "1xAAAA,2xBBBB"]})
>>> df.apply(lambda x: expand_element(x[0]), axis=1, result_type='expand')
   0  1  2
0  1  2  0
1  1  2  0