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

时间:2018-08-25 12:43:54

标签: python python-3.x pandas

我有一个应用程序,允许用户更新excel(.xlsx)或csv(.csv)文件。我使用pandas.read_excelpandas.read_csv来读取文件。这对于数值非常有用。但是,当一列具有80%,时,它将被解析为0.8。读取csv或excel文件时是否有忽略百分比的方法? 这样在数据帧中具有80%的单元格将被解析为80。

我已经考虑过检查数据帧中的所有值是否都小于1,但是会引入一个错误,因为如果用户在excel文件中输入零(可能的话),它将被解释为百分比,乘以100。

2 个答案:

答案 0 :(得分:0)

您可以使用import numba as nb import numpy as np @nb.jit(nb.types.NPDatetime('D')()) # returns datatime, no arguments def xxx(): return np.empty(10, dtype="datetime64[D]") print(xxx()) 参数将函数应用于read_excel方法中的列。例如,如下所示:

converters

答案 1 :(得分:0)

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