问题:Pandas DataFrame到列表列表
将列表列表转换为pandas数据框很容易:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
但是,如何将df重新变成列表列表?
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
回答 0
您可以访问基础数组并调用其tolist
方法:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
回答 1
如果数据具有要保留的列标签和索引标签,则有一些选项。
示例数据:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]], \
columns=('first', 'second', 'third'), \
index=('alpha', 'beta'))
>>> df
first second third
alpha 1 2 3
beta 3 4 5
的 tolist()
其他答案中描述方法很有用,但仅生成核心数据-可能还不够,具体取决于您的需求。
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
一种方法是使用将转换DataFrame
为json df.to_json()
,然后再次解析。这很麻烦,但确实具有一些优点,因为该to_json()
方法具有一些有用的选项。
>>> df.to_json()
{
"first":{"alpha":1,"beta":3},
"second":{"alpha":2,"beta":4},"third":{"alpha":3,"beta":5}
}
>>> df.to_json(orient='split')
{
"columns":["first","second","third"],
"index":["alpha","beta"],
"data":[[1,2,3],[3,4,5]]
}
繁琐,但可能有用。
好消息是,为列和行建立列表非常简单:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
这样生成:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
如果None
索引的名称令人讨厌,则将其重命名:
df = df.rename_axis('stage')
然后:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> print(f"columns: {columns}\nrows: {rows}")
columns: ['stage', 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
回答 2
我不知道它是否适合您的需求,但您也可以这样做:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
这只是ndarray模块中的一个numpy数组,可让您执行所有常见的numpy数组操作。
回答 3
我想保留索引,因此我针对该解决方案调整了原始答案:
list_df = df.reset_index().values.tolist()
现在,您可以将其粘贴到其他位置(例如,粘贴到“堆栈溢出”问题中),然后重新创建它:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
回答 4
也许情况有所改变,但这返回了ndarrays列表,可以满足我的需要。
list(df.values)
回答 5
注意:我在堆栈溢出中看到了很多情况,其中完全不需要将Pandas Series或DataFrame转换为NumPy数组或纯Python列表。如果您不熟悉该库,请考虑仔细检查那些Pandas对象是否已经提供了所需的功能。
引用@jpp 的评论:
在实践中,通常不需要将NumPy数组转换为列表列表。
如果Pandas DataFrame / Series不起作用,则可以使用内置的DataFrame.to_numpy
和Series.to_numpy
方法。
回答 6
这很简单:
import numpy as np
list_of_lists = np.array(df)
回答 7
我们可以使用DataFrame.iterrows()函数遍历给定Dataframe的每一行,并根据每一行的数据构造一个列表:
# Empty list
row_list =[]
# Iterate over each row
for index, rows in df.iterrows():
# Create list for the current row
my_list =[rows.Date, rows.Event, rows.Cost]
# append the list to the final list
row_list.append(my_list)
# Print
print(row_list)
我们可以成功地将给定数据帧的每一行提取到一个列表中