pandas dataframe输出需要是一个字符串而不是列表

时间:2017-09-25 21:47:27

标签: python-3.x pandas

我要求结果值应该是一个字符串。但是当我计算数据帧的最大值时,它会将结果作为列表。

import pandas as pd

def answer_one():
    df_copy = [df['# Summer'].idxmax()]
    return (df_copy)

df = pd.read_csv('olympics.csv', index_col=0, skiprows=1)
for col in df.columns:
    if col[:2]=='01':
        df.rename(columns={col:'Gold'+col[4:]}, inplace=True)
    if col[:2]=='02':
        df.rename(columns={col:'Silver'+col[4:]}, inplace=True)
    if col[:2]=='03':
        df.rename(columns={col:'Bronze'+col[4:]}, inplace=True)
    if col[:1]=='№':
        df.rename(columns={col:'#'+col[1:]}, inplace=True)

names_ids = df.index.str.split('\s\(') 
df.index = names_ids.str[0] # the [0] element is the country name (new index) 
df['ID'] = names_ids.str[1].str[:3] # the [1] element is the abbreviation or ID (take first 3 characters from that)

df = df.drop('Totals')
df.head()

answer_one()

但是这里的answer_one()会给我一个List作为输出而不是字符串。有人可以帮助我知道如何将其转换为字符串或如何直接从数据框中获得答案作为字符串。我不想使用str(df_copy)将列表转换为字符串。

1 个答案:

答案 0 :(得分:0)

你的第一个解决方案就像@ juanpa.arrivillaga所说:不包装它。你的职能变成了:

def answer_one():
    df_copy = df['# Summer'].idxmax()
    return (df_copy)

>>> 1

您可能不会期待的另一件事,但idxmax()将返回最大索引,也许您想要这样做:

def answer_one():
    df_copy = df['# Summer'].max()
    return (df_copy)

>>> 30

由于您不想str(df_copy),您可以改为df_copy.astype(str)

以下是我编写函数的方法:

def get_max_as_string(data, column_name):
    """ Return Max Value from a column as a string."""
    return data[column_name].max().astype(str)


get_max_as_string(df, '# Summer')
>>> '30'