从python中的pandas Series和DataFrames获取字符串?

时间:2013-03-29 14:18:56

标签: python pandas

我在pandas中有这个数据框:

d=pandas.DataFrame([{"a": 1, "b": 1}, {"c": 2, "b": 4}])
d["name"] = ["Hello", "World"]

我想根据“name”列中的字符串值选择一个元素,然后将该值作为字符串获取。要选择元素:

d[d["name"] == "World"]["name"]
Out:
1    World
Name: name

问题是它不会给出一个简单的字符串而是一个系列。转换为字符串无济于事 - 我怎样才能从中获取字符串"World"?这是唯一的方法吗?

d[d["name"] == "World"]["name"].values[0]

感谢。

3 个答案:

答案 0 :(得分:14)

有一种方法没有人提到可能值得注意的方法。这是我遇到的一个问题,我正在进行多项标准检查并获得一个项目系列(基本上是一个独特的行结果)。如果系列中只有一个项目,只需要该项目,或者知道要收集的特定项目的索引,那么就这样做:

d[d["name"] == "World"].tolist()[0]

表示单个项目系列中的第一个(也是唯一的)项目。

或者这个:

d[d["name"] == "World"].tolist()[index]

其中index是您在系列中寻找的项目的索引。

如果你想把它作为一个字符串,你可能需要在没有字符串化的情况下强制转换为字符串。

答案 1 :(得分:7)

正如@DSM指出的那样,一般情况下可能会有很多名为'World'的行,所以我们需要选择一行。

这样做的一种方法看起来很不错,可以使用where(然后是max):

In [11]: d.name.where(d.name == 'World', np.nan)
Out[11]: 
0      NaN
1    World
Name: name, dtype: object

In [12]: d.name.where(d.name == 'World', np.nan).max()
Out[12]: 'World'

注意:如果没有名称为“World”的行,则会返回NaN。

答案 2 :(得分:0)

更新:不建议使用,因为它会截断长文本,除非使用pandas> 1.0(未经测试)

不知道它可以在哪个版本的熊猫中工作,但不确定另一个选择:

d[d["name"] == "World"].to_string(index=False)

,如果超过一行,则还有其他选择:

 max_rows      int, optional

截断前要显示的最大行数。如果没有,则显示全部。

 min_rows      int, optional

要在截短的repr中显示的行数(当行数大于max_rows时)。