[英]Pandas - How to ignore percentages in read_excel and read_csv
我有一个允许用户更新 excel( .xlsx
) 或 csv ( .csv
) 文件的应用程序。 我使用pandas.read_excel
和pandas.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.