拆分没有str属性的pandas列对象

时间:2018-02-15 05:59:52

标签: python pandas object split attributes

我正在尝试在具有多个值的表中system.local个单元格。然后我想将这些拆分值堆叠成一列。

我一直得到: AttributeError:' DataFrame'对象没有属性'

  1. 某些列将具有相同的名称/标签
  2. 值将在str,flt,int等之间混合
  3. 将缺少值
  4. 我将此表保存为.csv
  5. 示例表:

    (原始表格)

    .split()

    (修改后的表格)

    List , A,  A , B     , B , A , C  
    row 1,joey,mike,henry,albert    ,sherru,tomkins  
    row 2, ,pig|soap    , ,123, ,  ,  
    row 3,yes, , , and|5.3|7, , ,     
    row 4, ,new york|up, , , , ,                  
    row 5,bubbles, ,movie, , , ,  
    

    这是我正在使用的代码,我是python / pandas的新手,所以它并不那么棒:

    List | Value | Category  
    row 1,joey, A  
    row 1,mike,A  
    row 1,henry,B  
    row 1,albert,B  
    row 1,sherru,A  
    row 1,tomkins,C  
    row 2,pig,A  
    row 2,soap,A  
    row 2,123,B  
    row 3,yes,A  
    row 3,and,B  
    row 3,5.3,B  
    ...   
    row 5,movie,B
    

1 个答案:

答案 0 :(得分:1)

您可以set_index作为第一步,为expand=True添加参数DataFramesplit

df2 = df.set_index('List').A.str.split(',', expand=True).stack().reset_index()

由于列名称中的dupes,您会收到错误,因此df.A会将所有列A作为DataFrame返回。

有两种可能的解决方案:

  1. 升级pandas,因为较新版本中的read_csv管理欺骗 - 添加.1.2pandas 0.19+

  2. cumcount更改列名:

  3. s = df.columns.to_series()
    df.columns = df.columns + s.groupby(s).cumcount().astype(str).radd('.').replace('.0','')
    

    <强>示例

    df = pd.DataFrame({'A':list('abcdef'),
                       'B':[4,5,4,5,5,4],
                       'C':[7,8,9,4,2,3],
                       'D':[1,3,5,7,1,0],
                       'E':[5,3,6,9,2,4],
                       'F':list('aaabbb')})
    df.columns = list('AABBCD')
    print (df)
       A  A  B  B  C  D
    0  a  4  7  1  5  a
    1  b  5  8  3  3  a
    2  c  4  9  5  6  a
    3  d  5  4  7  9  b
    4  e  5  2  1  2  b
    5  f  4  3  0  4  b
    
    s = df.columns.to_series()
    df.columns = df.columns + s.groupby(s).cumcount().astype(str).radd('.').replace('.0','')
    print (df)
       A  A.1  B  B.1  C  D
    0  a    4  7    1  5  a
    1  b    5  8    3  3  a
    2  c    4  9    5  6  a
    3  d    5  4    7  9  b
    4  e    5  2    1  2  b
    5  f    4  3    0  4  b