繁体   English   中英

Pandas - 如何忽略 read_excel 和 read_csv 中的百分比

[英]Pandas - How to ignore percentages in read_excel and read_csv

我有一个允许用户更新 excel( .xlsx ) 或 csv ( .csv ) 文件的应用程序。 我使用pandas.read_excelpandas.read_csv来读取文件。 这对数值很有用。 然而,当一列有80%,它被解析为0.8 在读取 csv 或 excel 文件时有没有办法忽略百分比? 因此,在数据框中将 80% 的单元格解析为 80。

我曾想过检查数据框中的所有值是否都小于 1,但这会引入一个错误,因为如果用户在 excel 文件中输入零(这是可能的),它将被解释为百分比,这将使其相乘由 100。

Excel 将百分比存储为小数。 % 表示只是数据的“视图”,而不是基础float值的属性。 如果您事先不了解您的专栏,您可以定义一些调查逻辑:-

首先正常读取您的文件(Excel 或 CSV):

df = pd.read_excel('file.xlsx')  # or pd.read_csv('file.csv')

然后识别读取为float列:

float_cols = df.select_dtypes(include=[np.float]).columns

现在过滤所有值都在 0 和 1.0 之间的列。 这不是无懈可击的,因为Boolean系列也将包括在内。 所以我们可以添加一个额外的条件,让至少有n 个不同的值。

pct_cols = [x for x in float_cols if df[x].between(0, 1).all() and len(df[x].unique()) > 2]

最后,将[0, 1]范围内的小数转换为[0, 100]范围内的百分比:

df[pct_cols] = df[pct_cols] * 100

这是一个完整的工作示例:

df = pd.DataFrame({'A': [0.1341234, 0.563465, 1.00, 0.00, 0.456546],
                   'B': [True, False, True, True, True],
                   'C': [1.0, 0.0, 1.0, 1.0, 0.0]})

float_cols = df.select_dtypes(include=[np.float]).columns
pct_cols = [x for x in float_cols if df[x].between(0, 1).all() and len(df[x].unique()) > 2]
df[pct_cols] = df[pct_cols] * 100

print(df)

           A      B    C
0   13.41234   True  1.0
1   56.34650  False  0.0
2  100.00000   True  1.0
3    0.00000   True  1.0
4   45.65460   True  0.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM