我有一个列表,其中a的长度为806。我想导入到列表中第一项是列名的数据框。我的代码是:

import pandas as pd
b = pd.DataFrame.from_records(a[1:],columns=[a[0]])


这给了我AssertionError: 1 columns passed, passed data had 22 columns错误,而显然我只有一列。

我尝试了代码的表示形式,并且可以正常工作。所以我不确定这是怎么回事。这是代码的表示形式:

import pandas as pd
arr= ['title', 'a','b','','','']
arr= filter(None, arr)
b = pd.DataFrame.from_records(arr[1:],columns=[arr[0]] )


我的清单一定有问题吗?我打印出a,它看起来很好,就像常规列表一样。我粘贴了a的打印输出并将其作为变量list放置,它给了我同样的错误AssertionError: 1 columns passed, passed data had 22 columns。我的清单似乎有问题。我还能做什么调试?

编辑(基于DSM建议):

import pandas as pd
arr=['Title', '000660.ks']
b = pd.DataFrame.from_records(arr[1:],columns=[arr[0]] )


这给出了AssertionError: 1 columns passed, passed data had 8 columns

最佳答案

您不想使用from_records,而是要使用默认的DataFrame构造函数。

from_records需要一个可迭代的列表,例如,字符串'0006660.ks'被读为('0','0',... ,'s'),这就是为什么在数据中出现8列错误的原因。

b = pd.DataFrame(a[1:], columns=[a[0]])

关于python - Python pandas dataframe从from_records读取,“AssertionError:传递了1列,传递的数据有22列”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24145140/

10-13 01:29