使用python处理列中的多个值
Posted
技术标签:
【中文标题】使用python处理列中的多个值【英文标题】:dealing with multiple values in a column using python 【发布时间】:2016-10-02 03:39:59 【问题描述】:我是 python 中的 pandas 和 pivot 函数的新手,需要一些帮助。
如何使用 python pandas 或数据透视表将此表转换为以下输出:
No class
1 U234
2 U234,U237,U239
3 U238,U239,U234
4 U237,U234
需要的输出:
No class
1 U234
2 U234
2 U237
2 U239
3 U238
3 U239
3 U234
4 U237
4 U234
【问题讨论】:
df.dtypes say
是什么意思?
【参考方案1】:
您可以先将split
列class
到DataFrame
、stack
它并使用reset_index
和rename
创建新的Series
:
print (df['class']
.str
.split(',', expand=True)
.stack()
.reset_index(drop=True, level=1)
.rename('class'))
0 U234
0 U237
1 U234
1 U237
1 U239
2 U238
2 U239
2 U234
3 U237
3 U234
Name: class, dtype: object
然后drop
原始列class
和join
新Series
:
print (df.drop('class', axis=1)
.join
(
df['class']
.str
.split(',', expand=True)
.stack()
.reset_index(drop=True, level=1)
.rename('class')
))
No class
0 1 U234
0 1 U237
1 2 U234
1 2 U237
1 2 U239
2 3 U238
2 3 U239
2 3 U234
3 4 U237
3 4 U234
如果在 NO NaN
列中的class
值:
print (pd.DataFrame([ x.split(',') for x in df['class'].tolist() ])
.stack()
.reset_index(drop=True, level=1)
.rename('class'))
0 U234
0 U237
1 U234
1 U237
1 U239
2 U238
2 U239
2 U234
3 U237
3 U234
Name: class, dtype: object
【讨论】:
谢谢@jezrael。出于某种原因,我收到如下错误:----> 1 print (pd.DataFrame([ x.split(',') for x in test['class'].tolist() ]) .stack() 。 reset_index(drop=True, level=1) .rename('class')) TypeError: 'str' object is not callable 我认为您使用的是旧版本的pandas
。 pd.__version__
是什么?
我的是:u'0.17.1'。也许我应该升级?
是的,我的版本是最后一个 - 0.18.1
,效果很好。如果使用Anaconda
和windows
,则使用cmd
- conda install pandas
是的,它工作正常!再次感谢@jezrael。请解释一下 - 为什么我们需要在第一步中重命名并在第二步中删除和重命名。以上是关于使用python处理列中的多个值的主要内容,如果未能解决你的问题,请参考以下文章