Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中检查n个列表并将其转换为数据帧?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

如何在Python中检查n个列表并将其转换为数据帧?

如何在Python中检查n个列表并将其转换为数据帧?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有几个列表定义如下,需要转换成数据帧。虽然我只提供了4个列表,但在我的问题中,我可能有n个列表,并且除了一个列表col_name之外,我对这些列表的名称没有任何先验知识 list1 = [1,2,3,4] list2 = [5,6,7,8] list3 = [9,10,11,12] . . . listn = [....] col_names = ['A', 'B', 'C', 'D'] 所需的输出是一个数据帧df,将所有n个列表和一个列表col_name组合为一个列名,如下所示: imp

我有几个列表定义如下,需要转换成数据帧。虽然我只提供了4个列表,但在我的问题中,我可能有n个列表,并且除了一个列表
col_name
之外,我对这些列表的名称没有任何先验知识

list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [9,10,11,12]
.
.
.
listn = [....]

col_names = ['A', 'B', 'C', 'D']
所需的输出是一个数据帧
df
,将所有n个列表和一个列表
col_name
组合为一个列名,如下所示:

import pandas as pd

df = pd.Dataframe([list1, list2, list3,.....,listn], columns = col_names)
print(df)

   A   B   C   D
0  1   2   3   4
1  5   6   7   8
2  9  10  11  12
.  .  .   .   .
.  .  .   .   .
n  .  .   .   .
我尝试通过引用问题的输入,使用
globals()
获取所有变量的列表。但是这个方法只返回变量名作为字符串,并将它们存储在字典中。我无法检查这些变量中的哪些是列表,这样我就可以执行某种迭代,使用它我可以将所有列表值附加到数据帧
df
。任何关于我如何解决这个问题的指导都将不胜感激

我正在Windows 10(x64)上使用Python 3.7.4。

globals()
返回所有全局变量及其名称和值的字典。浏览值列表,选择符合条件的值(列表中有4项)

或者,定义任意标准函数:

def is_good(x):
    return isinstance(x, list) \
           and len(x) == 4 \
           and all(map(lambda y: isinstance(y, int), x))
并将其应用于每个全局变量:

all_lists = [x for x in globals().values() if is_good(x)]
#[[1, 2, 3, 4], [8, 9, 10, 11]]

这允许检查列表项的数据类型。

如果将键传递到由
globals()
返回的字典,您将获得变量。您可以使用
type
查找类型:

In [1]: example_list = list()                                                                                                                                                       

In [2]: globals_dict = globals()                                                                                                                                                    

In [3]: type(globals_dict['example_list'])                                                                                                                                          
Out[3]: list
然后,您可以遍历
globals()
中的项目,并找出哪些项目属于
list
类型:

In [6]: globals_dict = dict(globals())                                                                                                                                              

In [7]: for key, value in globals_dict.items(): 
   ...:     if type(value) == list: 
   ...:         print("%s is a list" % key) 
   ...:                                                                                                                                                                             
_ih is a list
_dh is a list
In is a list
example_list is a list
注意,由于这个问题,我不得不复制
globals()
的返回值:

In [4]: for key, value in globals_dict.items(): 
   ...:     if type(value) == list: 
   ...:         print("%s is a list", key) 
   ...:                                                                                                                                                                             
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-4-18203a48d32a> in <module>
----> 1 for key, value in globals_dict.items():
      2     if type(value) == list:
      3         print("%s is a list", key)
      4 

RuntimeError: dictionary changed size during iteration
[4]中的
:对于键,全局项中的值()
…:如果类型(值)=列表:
…:打印(“%s”是一个列表),键)
...:                                                                                                                                                                             
---------------------------------------------------------------------------
运行时错误回溯(上次最近调用)
在里面
---->1表示键,全局项中的值()
2如果类型(值)=列表:
3打印(“%s”是一个列表),键)
4.
RuntimeError:字典在迭代期间更改了大小

这些列表来自哪里?您能将它们预先排列成列表列表吗?不幸的是,这些列表已经在python环境中创建。我遇到的问题是检查其中哪些是列表并将其转换为数据帧。列表名称是否遵循任何特定模式?它们确实被称为
list1
list2
等吗?那么,您想合并所有列表吗?是否确实没有要跳过的列表?如果可以,应更改源代码,将所有列表放入列表列表中。拥有数百个相似命名的对象,你必须按名称引用它们,这是一种非常糟糕的做法,你会发现越来越多类似的问题。这很有效!只有一个问题。有没有办法将列表
列名
排除在上述列表之外?这是我定义的唯一一个作为数据帧标题提供的列表。我添加了一个条件来检查项目的数据类型。感谢您的帮助!非常感谢所有的帮助。谢谢你@David Cullen!这个解决方案也有效。但由于DYZ首先提供了一个解决方案,我接受了这个答案!你不必为自己选择的最佳答案而道歉。您选择的答案显然对您的具体案例更有帮助,并且包含了您问题评论中的信息。我的目标是解决更普遍的问题,即如何理解和使用
globals()
的返回值。
In [4]: for key, value in globals_dict.items(): 
   ...:     if type(value) == list: 
   ...:         print("%s is a list", key) 
   ...:                                                                                                                                                                             
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-4-18203a48d32a> in <module>
----> 1 for key, value in globals_dict.items():
      2     if type(value) == list:
      3         print("%s is a list", key)
      4 

RuntimeError: dictionary changed size during iteration