Pandas_excel百分比读取为字符串

fivyi3re  于 2023-01-01  发布在  其他
关注(0)|答案(3)|浏览(219)

我的excel工作表中有一列百分比是用百分比符号存储的(例如“50%”)。我如何强制pandas.read_excel读取字符串“50%”,而不是将其转换为浮点型?
当前read_excel实现将百分比解析为浮点数0.5。另外,如果我添加converter = {col_with_percentage: str}参数,它将其解析为字符串'0.5'。是否有办法读取原始百分比值(“50%”)?

4ioopgfo

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)

或作为lambda:

df = pd.read_excel('example.xlsx', converters={
    'percents': lambda value: '{}%'.format(value * 100)})

结果:

percents
0    40.0%
1    50.0%
2    60.0%
vbkedwbf

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%
798qvoo8

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文件是错误的构建,揭示了一个真正的错误。所以我只是添加特殊的警报来管理这种特殊情况。

相关问题