不经过numpy的处理,可以使用Series下的to_list()方法直接完成
见pandas的官方文档:pandas.Series.to_list — pandas 2.0.3 documentation (pydata.org)
import pandas as pd
C=pd.DataFrame([[1,2,3],[3,4,5]])
C[0].to_list()
输出结果是:
[1, 3]
这里的逻辑在于,虽然C是一个DataFrame,但是当我们获取它的某一列的时候,此列的类型为series。
作为对比,如果我们直接将一个一维的DataFrame执行.to_list()操作,则会报错:
import pandas as pd
A=pd.DataFrame([1,2,"v",4,5,6])
A.to_list()
报错为:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [20], in <cell line: 1>()
----> 1 A.to_list()
File D:\Users\anaconda3\lib\site-packages\pandas\core\generic.py:5487, in NDFrame.__getattr__(self, name)
5480 if (
5481 name not in self._internal_names_set
5482 and name not in self._metadata
5483 and name not in self._accessors
5484 and self._info_axis._can_hold_identifiers_and_holds_name(name)
5485 ):
5486 return self[name]
-> 5487 return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'to_list'
即使对A做转置,也是一样的结果,根本原因在于DataFrame没有to_list()的方法。
另外,要注意网上常见的df.values.tolist()的方法,本质上它是用df.values把df转为numpy.array的格式,然后再用numpy的tolist()方法。
这种方法的优点在于,可以处理二维以上的数据,生成嵌套list,本身是正确的,但是在使用要注意维度的问题:
比如:
import pandas as pd
A=pd.DataFrame([1,2,"v",4,5,6])
A.values.tolist()
结果是:
[[1], [2], ['v'], [4], [5], [6]]
发现多了一维。
这个误会主要还是因为此方法可以直接对DataFrame做处理导致的。按照下面的语句,就可以解决此问题:
A[0].values.tolist()
结果是:
[1, 2, 'v', 4, 5, 6]