我有一个应用程序,允许用户更新excel(.xlsx
)或csv(.csv
)文件。我使用pandas.read_excel
和pandas.read_csv
来读取文件。这对于数值非常有用。但是,当一列具有80%,
时,它将被解析为0.8
。读取csv或excel文件时是否有忽略百分比的方法?
这样在数据帧中具有80%的单元格将被解析为80。
我已经考虑过检查数据帧中的所有值是否都小于1,但是会引入一个错误,因为如果用户在excel文件中输入零(可能的话),它将被解释为百分比,乘以100。
答案 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