匹配列名时的值错误

时间:2014-08-05 16:55:05

标签: pandas

以下代码显示错误。但是如果我删除usercols参数,它就可以工作。

from StringIO import StringIO
import pandas as pd

u_cols = ['page_id','web_id']
audit_trail = StringIO('''
page_id | web_id
3|0
7|3
11|4
15|5
19|6
''')

df = pd.read_csv(audit_trail, sep="|", usecols = u_cols  )
  

ValueError:传递的标题名称与usecols不匹配

我需要使用u_cols列表,因为列标题是动态生成的。

3 个答案:

答案 0 :(得分:6)

"名称"应该用来代替" usecolmns"

from StringIO import StringIO
import pandas as pd

u_cols = ['page_id','web_id']
audit_trail = StringIO('''
page_id | web_id
3|0
7|3
11|4
15|5
19|6
''')

df11 = pd.read_csv(audit_trail, sep="|", names = u_cols  )

答案 1 :(得分:3)

这是因为|旁边的空白区域分隔符。当您运行pd.read_csv(audit_trail,sep="|")时,您确实拥有[' page_id(空格)','(空格)web_id']而不是[' page_id' ' web_id'。]

我建议将以下正则表达式模式作为你的分隔符\s*\|\s*传递,它将删除任何空格。分隔符。这是完整的解决方案......

u_cols = ['page_id','web_id']

"""page_id | web_id
3|0
7|3
11|4
15|5
19|6"""

df = pd.read_csv(StringIO(s),sep="\s*\|\s*",usecols = u_cols)

<强>输出

   page_id  web_id
0        3       0
1        7       3
2       11       4
3       15       5
4       19       6

答案 2 :(得分:0)

如果其他人遇到此错误,这就是我刚刚发生的情况:我使用 parse_dates=[[0,1]] 合并和解析两列中的日期并得到此错误。所以 names 参数应该包含与原始 csv 相同数量的列,所以我只是在列表中添加了额外的空字符串:names=['column1','','column2',...]