将一个DataFrame行转换为平面列表

Jac*_*b H 6 python pandas

我是Python的新手,因此在将a中的一行DataFrame转换为flat时遇到了麻烦list。为此,我使用以下代码:

玩具DataFrame

import pandas as pd
d = {
     "a": [1, 2, 3, 4, 5],
     "b": [9, 8, 7, 6, 5],
     "n": ["a", "b", "c", "d", "e"]
}

df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

我的代码:

df_note = df.loc[df.n == "d", ["a", "b"]].values #convert to array
df_note = df_note.tolist() #convert to nested list
df_note = reduce(lambda x, y: x + y, df_note) #convert to flat list
Run Code Online (Sandbox Code Playgroud)

对我来说,这段代码似乎既粗糙又效率低下。我array在a之前转换为a 的事实list是导致问题的原因,即list嵌套。尽管如此,我找不到将行直接转换为列表的方法。有什么建议吗?

这个问题是不是愚弄的这个。就我而言,我希望清单不多。

Col*_*vel 9

您快到了,实际上只是使用flatten而不是reduce取消嵌套该数组(而不是取消嵌套该列表),并使用链式操作来获得一个衬里:

df.loc[df.n == "d", ['a','b']].values.flatten().tolist()
#[4, 6]
Run Code Online (Sandbox Code Playgroud)

  • 通用解决方案(对示例不太具体)是:“df.loc[index, :].values.flatten().tolist()”,其中“index”是要转换的 pandas Dataframe 行的索引。 (4认同)

Mik*_*ler 6

您会得到一个嵌套列表,因为您选择了一个子数据框。

这需要一行,可以将其转换为列表而无需展平:

df.loc[0, :].values.tolist()
[1, 9, 'a']
Run Code Online (Sandbox Code Playgroud)

如何切片列表:

df_note.values.tolist()[0]
[4, 6]
Run Code Online (Sandbox Code Playgroud)

这些值存储在 NumPy 数组中。所以你不转换它们。Pandas 在底层使用了大量 NumPy。属性访问df_note.values只是部分数据框的不同名称。