将列表嵌套转换成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]]
将列表嵌套转换成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]]
您可以访问底层数组并调用其tolist
方法:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
。 - cs95如果数据具有您想要保留的列和索引标签,则有几个选项。
示例数据:
>>> 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]]
一种方法是使用 df.to_json()
将 DataFrame
转换为 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]]
DataFrame.itertuples()
或 DataFrame.to_records()
是否更简单些呢? - AMC我想要保留索引,因此我将原始答案适应到了这个解决方案中:
list_df = df.reset_index().values.tolist()
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
# get csv data
df = pd.read_csv(filename)
# combine column headers and list of lists of values
lol = [df.columns.tolist()] + df.values.tolist()
虽然与问题不太相关,但是有相同的期望。
将数据框系列转换为列表的列表,以使用 Plotly 中的 create_distplot 绘制图表。
hist_data=[]
hist_data.append(map_data['Population'].to_numpy().tolist())
list(df.values)
Pandas DataFrame
转换为表格(列表形式)并包括标题列,则应该使用以下方法:import pandas as pd
def dfToTable(df:pd.DataFrame) -> list:
return [list(df.columns)] + df.values.tolist()
使用方法(在REPL中):
>>> df = pd.DataFrame(
[["r1c1","r1c2","r1c3"],["r2c1","r2c2","r3c3"]]
, columns=["c1", "c2", "c3"])
>>> df
c1 c2 c3
0 r1c1 r1c2 r1c3
1 r2c1 r2c2 r3c3
>>> dfToTable(df)
[['c1', 'c2', 'c3'], ['r1c1', 'r1c2', 'r1c3'], ['r2c1', 'r2c2', 'r3c3']]
如果您对该库不熟悉,请再次确认所需功能是否已由那些Pandas对象提供。
我的解决方案:使用 to_dict()。
dict_of_lists = df.to_dict(orient='split')
index
、columns
和data
。如果您决定不需要列名和索引名称,您可以使用以下代码获取数据:dict_of_lists['data']
df.index.name
和df.columns.name
)。 - Thorsten"df.values"返回一个numpy数组。这不会保留数据类型。整数可能会转换为浮点数。
df.iterrows()返回一个系列,也不能保证保留数据类型。参见:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
下面的代码将转换为列表并保留数据类型:
rows = [list(row) for row in df.itertuples()]