gpt4 book ai didi

python - 使用来自另一个 DataFrame 的文本选择 Pandas DataFrame

转载 作者:行者123 更新时间:2023-11-28 22:49:04 24 4
gpt4 key购买 nike

快速披露:我来自 R 背景,正在切换到 pandas(在 python 3.3.3 上运行)。

我想使用数据框条目中的文本从数据框中选择行。这是一个基本操作,但我无法绕过语法。

例如,使用这个 DataFrame(抱歉分割线,但我想让示例更清楚):

films = pandas.DataFrame({'$title':[  "The Godfather",
"Pulp Fiction",
"The Godfather: Part II",
"Fight Club"],

'$director': [ "Coppola, Francis Ford",
"Tarantino, Quentin",
"Coppola, Francis Ford",
"Fincher, David"]})

如果我想选择第一位导演创作的所有电影,即“Coppola, Francis Ford”,我使用的命令是:

In [1]: director = films.iloc[[1]]["director"]

In [2]: director

1 Coppola, Francis Ford
Name: director, dtype: object

In [3]: a = films[ films["director"] == director ]

ValueError: Series lengths must match to compare

如果我这样做:

In [4]: a = films[ films["director"] == str(director) ]

我得到一个空的 DataFrame。这里发生了什么?好像我错过了什么。

最佳答案

好的,首先我看到你犯了一些风格/语义错误,这对于 R-to-Python 转换者来说很常见:

  • 您的列名称不需要 $ 符号,它实际上是 column selection nicer因为你可以写 films.director 如果名称只是 'director'(它必须是一个有效的 Python 标识符才能使这个语法糖起作用)
  • Python 中的索引从 0 而不是 1 开始,因此您选择第一个导演作为 films.director[0]

假设您从 DataFrame 定义中删除了 $ 符号,您可以选择电影:

In [16]: films[films['director'] == films['director'][0]]
Out[16]:
director title
0 Coppola, Francis Ford The Godfather
2 Coppola, Francis Ford The Godfather: Part II

甚至像 films[films.director == films.director[0]] 一样干净。

使用您的原始 DataFrame,您可以执行查询:

director = films.iloc[[1]]['$director'][1]
films[films['$director'] == director]

一个错误是您首先使用 '$director' 定义表,然后使用 'director' 作为列名对其进行查询。

最后的 [1] 是必需的,因为您使用列表 [1] 而不是值 1 索引了 DataFrame ,所以你得到了一个系列,正如 CT Zhu 已经注意到的那样。 List indexing更意味着选择几个任意元素,例如 films.iloc[[1, 3]]。在你的情况下,写起来会更清楚

director = films.iloc[1]['$director']

另外,请注意,这仍然是 Tarantino 而不是 Coppola。

关于python - 使用来自另一个 DataFrame 的文本选择 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com