2017-09-25 23 views
0

結果の値は文字列にする必要があります。しかし、データフレームの最大値を計算すると、結果がリストになります。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

まあ、まず第、あなたは*リスト*でラップされています 'df_copy = [。] '#夏' [DF idxmax()] ' –

答えて

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' 
関連する問題