【python, append】将一列数据改为百分比、并解决append替换前面数据的问题

如何将一列混合数据改为百分比、并解决append替换前面数据问题

df为一个有多行多列的dataframe,其中一列df['收益率']包含多种类型(float、NAN、以及string),希望把df['收益率']中的float转为百分比格式,其他数据不变。

代码如下:

def astype_percent(df):
    t = []      
    for i in df:
        use_dict = {}
        if type(i) == float:
            if not np.isnan(i):
                i = '%.2f%%' % (i * 100)
        if type(i) == str:
            use_dict = str(i)        
        t.append(use_dict)
    return pd.Series(t)

df['收益率'] = astype_percent(df['收益率'])

然后发现df['收益率'] 这列整体往前移动了一行,导致错位、最后一行缺值。
查了如何解决append替换前面数据的问题,但没有起作用


import pandas as pd
import numpy as np


df = pd.DataFrame({'收益率': ['4', 0.5, np.NAN, 0.36,0.45678, 1,'0.345','aaa']})
print(df)

def astype_percent(data):
    if isinstance(data,float):
        if np.isnan(data):
            return data
        return '%.2f%%' % (data * 100)
    elif isinstance(data,int):
        return '%.2f%%' % (data * 100)
    elif isinstance(data,str):
        try:
            data = float(data)
        except:
            return np.NAN
        else:
            return '%.2f%%' % (float(data) * 100)


df['收益率'] = df['收益率'].apply(astype_percent)

print(df)

img

img


你题目的解答代码如下:

import pandas as pd
import numpy as np

def astype_percent(df):
    t = []
    for i in df:
        if type(i) == float and not np.isnan(i):
            i = '%.2f%%' % (i * 100)
        t.append(i)
    return pd.Series(t)

df = pd.DataFrame({'收益率':['aaaa',0.5,np.NAN,0.36,'bbbb']})
print(df)
df['收益率'] = astype_percent(df['收益率'])
print(df)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img