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

标签 python pandas object split attributes

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

我不断收到:AttributeError: 'DataFrame' object has no attribute 'str'

  1. 一些列将具有相同的名称/标签
  2. 值将在 str、flt、int 等之间混合
  3. 会有缺失值
  4. 我将此表保存为 .csv

示例表:

(原表)

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, , , ,  

(修改后的表格)

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

这是我正在使用的代码,我是 python/pandas 的新手,所以它不是很好:

import pandas as pd  
df = pd.read_csv('test.csv')  

df2 = df.A.str.split('|').apply(pd.series)  
df2.index = df.set_index([List]).index  
df2.stack().reset_index([List])

最佳答案

您可以 set_index作为第一步,将参数 expand=True 添加到 split对于 DataFrame:

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

你得到错误是因为列名中的重复,所以 df.A 将所有列 A 作为 DataFrame 返回。

有两种可能的解决方案:

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

  2. 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

关于python - 拆分没有 str 属性的 pandas 列对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800795/

相关文章:

python - 根据其他列值生成列

python - Pandas 编写的公式未评估并在 Office 365 中触发错误警告

python - 如何在 pandas groupby 中移动整个组

java - Java获取数组元素的类型

python - 如何从列表列表中制作平面列表?

python - 如何避免在网络爬行时出现断词

python - OpenCV 在 Python 3 中通过套接字直播视频

javascript - getJSON 显示 [object Object] 而不是实际值

mysql - 如何在 javascript (nodejs) 中使用 for 或 foreach 将带有对象值的数组插入到 mysql 中?

python - 从头开始切割字符串