如何将 pandas.core.frame.DataFrame 转换为列表?
Posted
技术标签:
【中文标题】如何将 pandas.core.frame.DataFrame 转换为列表?【英文标题】:How can i convert pandas.core.frame.DataFrame to a list? 【发布时间】:2021-01-14 04:04:07 【问题描述】:这是我的 csv 文件中的
print(df.loc[df["Header C"] == "happy"])
这是输出:
Header A Header B Header C Header D Header E
0 rowa.a rowa.c happy rowa.d rowa.e
3 rowc.a rowc.c happy rowd.d rowc.e
5 rowe.a rowe.c happy rowe.d rowe.e
有什么方法可以将输出的标题变成一个列表并将其存储在一个变量中?
与行相同,我也希望它创建一个列表并将其存储在一个变量中。
(像这样):
a = ["Header A", "Header B", "Header C", "Header D", "Header E"]
n = ["rowa.a", "rowa.c", "happy", "rowa.d", "rowa.e"]
o = ["rowc.a", "rowc.c", "happy", "rowc.d", "rowc.e"]
我想要的最终输出是漂亮的
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = a
x.add_row(n)
x.add_row(o)
print(x)
以及这个的输出:
+----------+----------+----------+----------+----------+
| Header A | Header B | Header C | Header D | Header E |
+----------+----------+----------+----------+----------+
| rowa.a | rowa.c | happy | rowa.d | rowa.e |
+----------+----------+----------+----------+----------+
非常感谢!
【问题讨论】:
【参考方案1】:您可以将数据框转换回字典,然后访问您描述的所有列表:
df.to_dict('split')
【讨论】:
谢谢你先生,你的回答节省了我的时间。它对我有用【参考方案2】:你可以这样做:
# get header and df values
all_rows = [df.columns.tolist()] + df.to_numpy().tolist()
# get each rows (or you can loop through all_rows)
a = all_rows[0]
n = all_rows[1]
o = all_rows[1]
【讨论】:
【参考方案3】:有几种不同的方法可以解决您的问题。
我可能会选择这个解决方案:
Pandas 在 DataFrame 类上提供迭代器来访问数据帧,例如逐行。 DataFrame.iteritems() 应该可以解决问题。
它遍历您的数据框并为您提供 (column_name, values) 的元组,其中 column_name 的类型为 str,值的类型为 Series。 要将 Series 的值作为列表返回,可以使用 Series.tolist()
这是一个可能的解决方案的粗略草图:
import pandas as pd
df = pd.DataFrame(
"Header A:" : ["foo_a","bar_a","baz_a"],
"Header B:" : ["foo_b","bar_b","baz_b"],
"Header C:" : ["foo_c","bar_c","baz_c"]
)
for column,values in df.iteritems():
print(column)
print(values.tolist)
【讨论】:
【参考方案4】:from prettytable import PrettyTable
import pandas as pd
# create dataframe
df = pd.DataFrame(
'a': ["Header A", "Header B", "Header C", "Header D", "Header E"],
'n': ["rowa.a", "rowa.c", "happy", "rowa.d", "rowa.e"],
'o': ["rowc.a", "rowc.c", "happy", "rowc.d", "rowc.e"]
)
# create pretty table
table = PrettyTable()
table.field_names = df['a'].tolist()
table.add_row(df['n'].tolist())
table.add_row(df['o'].tolist())
print(x)
或者,当您有很多列并且不想手动列出它们时,可以使用迭代:
table = PrettyTable()
table.field_names = df[next(iter(df.columns))].tolist()
for col in df.columns:
table.add_row(df[col].tolist())
【讨论】:
以上是关于如何将 pandas.core.frame.DataFrame 转换为列表?的主要内容,如果未能解决你的问题,请参考以下文章