我正在尝试在具有多个值的表中system.local
个单元格。然后我想将这些拆分值堆叠成一列。
我一直得到: AttributeError:' DataFrame'对象没有属性'
示例表:
(原始表格)
.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
答案 0 :(得分:1)
您可以set_index
作为第一步,为expand=True
添加参数DataFrame
至split
:
df2 = df.set_index('List').A.str.split(',', expand=True).stack().reset_index()
由于列名称中的dupes,您会收到错误,因此df.A
会将所有列A
作为DataFrame
返回。
有两种可能的解决方案:
升级pandas,因为较新版本中的read_csv
管理欺骗 - 添加.1
,.2
(pandas 0.19+)
按cumcount
更改列名:
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