我的excel工作表中有一列百分比是用百分比符号存储的(例如“50%”)。我如何强制pandas.read_excel读取字符串“50%”,而不是将其转换为浮点型?当前read_excel实现将百分比解析为浮点数0.5。另外,如果我添加converter = {col_with_percentage: str}参数,它将其解析为字符串'0.5'。是否有办法读取原始百分比值(“50%”)?
pandas.read_excel
read_excel
converter = {col_with_percentage: str}
4ioopgfo1#
你可以用转换器传递你自己的函数。一些东西来生成一个字符串(例如:50%)可能类似于:
def convert_to_percent_string(value): return '{}%'.format(value * 100)
import pandas as pd df = pd.read_excel('example.xlsx', converters={ 'percents': convert_to_percent_string}) print(df)
df = pd.read_excel('example.xlsx', converters={ 'percents': lambda value: '{}%'.format(value * 100)})
percents 0 40.0% 1 50.0% 2 60.0%
vbkedwbf2#
读取后可以生成字符串
df = pd.DataFrame(np.random.ranf(size=(4,1)),columns =['col_with_percentage']) df['col_with_percentage_s']= (df.col_with_percentage*100).astype(int).astype(str)+'%' df
输出:
col_with_percentage col_with_percentage_s 0 0.5339712650806299 53% 1 0.9220323933894158 92% 2 0.11156261877930995 11% 3 0.18864363985224808 18%
但是更好的方法是在显示器上格式化,你可以通过style在panda中实现
df.style.format({'col_with_percentage': "{:.0%}"})
col_with_percentage col_with_percentage_s 0 53% 53% 1 92% 92% 2 11% 11% 3 19% 18%
798qvoo83#
我编写了一个特殊的转换,因为有时在Excel中,这些百分比可能会与同一列中的真实字符串或数字融合,有时会带有或不带有小数。示例:"百分之十二"、"百分之十二"、"接近百分之二十"、"十五点五"、"十五点五"、"十一"、"十四点零五"、"十四点零五"、"百分之零"; "100%"、"无结果"、"100"我希望保留真正Excel百分比值的百分比符号,保留小数,不更改其他值:
import re df[field] = (df[field].apply(lambda x: str(round(float(x) * 100, 2)).rstrip('0').rstrip('.') + ' %' if re.search(r'^0\.\d+$|^0$|^1$',x) else x))
这是可行的,但仍有一个问题:如果一个单元格包含0到1之间的一个实数,那么它就变成了一个百分比:"0.3"变成"30%"但这是一个特殊的情况,当Excel文件是错误的构建,揭示了一个真正的错误。所以我只是添加特殊的警报来管理这种特殊情况。
3条答案
按热度按时间4ioopgfo1#
你可以用转换器传递你自己的函数。一些东西来生成一个字符串(例如:50%)可能类似于:
代码:
测试代码:
或作为lambda:
结果:
vbkedwbf2#
读取后可以生成字符串
输出:
但是更好的方法是在显示器上格式化,你可以通过style在panda中实现
输出:
798qvoo83#
我编写了一个特殊的转换,因为有时在Excel中,这些百分比可能会与同一列中的真实字符串或数字融合,有时会带有或不带有小数。
示例:
"百分之十二"、"百分之十二"、"接近百分之二十"、"十五点五"、"十五点五"、"十一"、"十四点零五"、"十四点零五"、"百分之零"; "100%"、"无结果"、"100"
我希望保留真正Excel百分比值的百分比符号,保留小数,不更改其他值:
这是可行的,但仍有一个问题:如果一个单元格包含0到1之间的一个实数,那么它就变成了一个百分比:
"0.3"变成"30%"
但这是一个特殊的情况,当Excel文件是错误的构建,揭示了一个真正的错误。所以我只是添加特殊的警报来管理这种特殊情况。