2

这是我的 csv 文件中的 <class 'pandas.core.frame.DataFrame'> 。这是因为我想将所有在 Header C 中具有“快乐”值的 Header A 分组

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  |
+----------+----------+----------+----------+----------+

非常感谢!

4

4 回答 4

3

嘿,您可以将数据框转换回字典,然后访问您描述的所有列表:

df.to_dict('split')
于 2020-09-28T14:51:15.430 回答
0

你可以做:

# 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]
于 2020-09-28T15:01:33.170 回答
0

有几种不同的方法可以解决您的问题。

我可能会选择这个解决方案:

Pandas 在 DataFrame 类上提供迭代器来访问数据帧,例如逐行访问。DataFrame.iteritems()应该可以解决问题。

它遍历您的数据框并为您提供 (column_name, values) 的元组,其中 column_name 是str类型,而 values 是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)
于 2020-09-28T15:03:17.003 回答
0
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())
于 2020-09-29T17:20:54.857 回答