使用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】:

您可以先将splitclassDataFramestack 它并使用reset_indexrename 创建新的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原始列classjoinSeries

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 我认为您使用的是旧版本的 pandaspd.__version__ 是什么? 我的是:u'0.17.1'。也许我应该升级? 是的,我的版本是最后一个 - 0.18.1,效果很好。如果使用Anacondawindows,则使用cmd - conda install pandas 是的,它工作正常!再次感谢@jezrael。请解释一下 - 为什么我们需要在第一步中重命名并在第二步中删除和重命名。

以上是关于使用python处理列中的多个值的主要内容,如果未能解决你的问题,请参考以下文章

使用python处理列中的多个值

我想在列中的值中添加“%”单位

如何根据python中的多个条件计算列中的唯一行

从数据框列中的字符串值中删除字符

从数据库列和 C# 中的 textBox 值中扣除值,扣除后的值必须存储在新列中

使用python为1列中的相同值创建多个csv