空列的pandas断言错误

2024-06-30 08:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,当填充时,将放入pandas dataframe。有时,main_list在每个list中有4元素,有时它有3。在

# Example list 1
[["foo1", "baa1", "faa1", "gaa1"], ["foo2", "baa2", "faa2", "gaa2"], ["foo3", "baa3", "faa3", "gaa3"]]

# Example list 2
[["foo1", "baa1", "faa1"], ["foo2", "baa2", "faa2"], ["foo3", "baa3", "faa3", "gaa3"]]

当我将main_list读入其中时,我定义了pandas数据帧列。执行example list 1 and 2下面的代码似乎没有问题。在

^{pr2}$

有时,在特殊场合,example list 3出现时,我的问题就出现了

# Example list 3
[["foo1", "baa1", "faa1"], ["foo2", "baa2", "faa2"], ["foo3", "baa3", "faa3"]]

当发生这种情况时,列表中只有3元素,而不是通常的4。熊猫会扔给我一个AssertionError: 4 columns passed, passed data had 3 columns

我理解发生了什么,因为只有3元素。但是我能做些什么来解决这个问题呢?在


Tags: 元素pandas列表mainexamplelistfoo1foo2
2条回答

这就是使用pandasreindex获得通用解决方案的方法:

column_names = ["col1", "col2", "col3", "col4"]

def max_elements(nested_lst):
   return max([len(lst) for lst in nested_lst])    

pandas.DataFrame(example_list, 
                 columns=column_names[:max_elements(example_list)]).reindex(columns = column_names)

以下是我的输出和您的最新列表:

^{pr2}$

您可以先创建一个通用数据帧(不指定列名),然后在以下事实之后重命名列:

df = pd.DataFrame(example_list)
df.columns = columns[:len(df.columns)]
df = df.reindex(columns=columns)

example_list是第三个示例时,pd.DataFrame(example_list)将只有3列。要确保df包含所有四列,请使用reindex。这是上面最后一行的目的。在


例如

^{pr2}$

收益率

   col1  col2  col3  col4
0  foo1  baa1  faa1  gaa1
1  foo2  baa2  faa2  gaa2
2  foo3  baa3  faa3  gaa3
   col1  col2  col3  col4
0  foo1  baa1  faa1  None
1  foo2  baa2  faa2  None
2  foo3  baa3  faa3  gaa3
   col1  col2  col3  col4
0  foo1  baa1  faa1   NaN
1  foo2  baa2  faa2   NaN
2  foo3  baa3  faa3   NaN

相关问题 更多 >