将pandas系列输出转换为字符串

时间:2017-10-18 13:04:51

标签: python pandas

我试图将pandas中的查询输出从一系列的格式转换为字符串的格式。 功能如下(金*是列)

def try_three():
    import numpy as np
    nz=df[(df["Gold"]>0) & (df["Gold.1"]>0) & (df["Gold.2"]>0)]
    nz["average"]=((nz["Gold"])-(nz["Gold.1"]))/(nz["Gold.2"])
    return nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"]

输出

Country
Bulgaria    BUL
Name: ID, dtype: object

其中Country是索引的名称,BUL是ID字段的值。 我已经尝试附加.astype(str)来获取国家/地区的名称或ID,但没有成功。如果我在前面加上" len"我得到答案1,所以我认为有一些类似的东西,同样简单的输出作为字符串。

2 个答案:

答案 0 :(得分:1)

IIUC您希望获得系列中的第一个元素(ID列):

df['ID'].iat[0]

演示:

In [77]: df = pd.DataFrame({'ID':['BUL']}, index=['Bulgaria']).rename_axis('Country')

In [78]: df
Out[78]:
           ID
Country
Bulgaria  BUL

In [79]: df['ID']
Out[79]:
Country
Bulgaria    BUL
Name: ID, dtype: object

In [80]: df['ID'].iat[0]
Out[80]: 'BUL'

答案 1 :(得分:1)

如果输出总是1个元素Series(因为只有一个max)使用Series.item

nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"].item()

但如果可能的话,如果可能有多个最大值则失败。

从列表中可以获得可用的返回列表或加入string

nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"].tolist()

或者:

', '.join(nz.where(nz["average"]==np.max(nz["average"])).dropna())["ID"].tolist()

如果想要一般解决方案:

a = nz.where(nz["average"]==np.max(nz["average"])).dropna()["ID"]

if len(a) == 1:
    return a.item()
else:
    return ', '.join(a) # a.tolist()