Pandas的.to_string(index = True)不遵循文档

时间:2014-12-30 18:58:44

标签: python pandas

如果另一列的值与某些条件匹配,我想打印一列的值。在下面的示例中,如果学生的分数为5,我想打印学生的姓名。(为简单起见,数据框中只有一名学生。

df = pd.DataFrame()

df['name'] = ['jane']
df['score'] = [5]

当我尝试使用最简单的解决方案打印名称时,我得到的不仅仅是名称:

In [62]:

print(df['name'][df['score'] == 5])
0    jane
Name: name, dtype: object

当我尝试使用.to_string函数时,我仍然得到索引号:

In [60]:

print(df['name'][df['score'] == 5].to_string())
Out[60]:
[0    jane
 Name: name, dtype: object]

最后,我查看了.to_string()documentation,发现了这个:

  

index:bool,可选择是否打印索引(行)标签,默认   真

但是,当我尝试使用.to_string(index = False)时,出现错误:

In [64]:

df['name'][df['score'] == 5].to_string(index = False)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-54-4ed8cfe4b098> in <module>()
----> 6 df['name'][df['score'] == 5].to_string(index = False)

TypeError: to_string() got an unexpected keyword argument 'index'

3 个答案:

答案 0 :(得分:7)

您关联的文档适用于DataFrame.to_string,但您在系列上调用to_string(因为您首先选择一列df['name'])。 Series.to_string The documentation表示它不接受index参数。

有人可能会争辩说它应该有一个,但行为至少与文档一致。

答案 1 :(得分:1)

表达式:

df['name'][df['score'] == 5][0]

返回 Series 字符串。如果要打印 Series 中的所有字符串,则应该迭代它,就像迭代列表或元组一样。

因此,如果您要打印所有分数为5的学生的姓名:

for student in df['name'][df['score'] == 5]:
    print(student)

答案 2 :(得分:0)

这可以按你的喜好工作:

    In [10]:
    print(df[df['score'] == 5][['score','name']].to_string(columns=['name'],header=False,index=False))
    Out[10]:
     jane