Python pandas dataframe 从 records 读取时出现 "AssertionError: 传入的列数为 1, 传入的数据有 22 列
我有一个长度为 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
1 个回答
3
你应该使用默认的 DataFrame 构造函数,而不是用 from_records
。
from_records
需要一个可迭代的列表,比如说字符串 '0006660.ks'
被当作 ('0','0',... ,'s')
来读取,这就是为什么你会收到关于数据有 8 列的错误提示。
b = pd.DataFrame(a[1:], columns=[a[0]])