将超过100%的百分比视为两位数%

时间:2019-06-12 00:03:08

标签: python pandas

我有一个包含一些原始数据的CSV文件。我有条件地删除行,但是当百分比> 100%时遇到问题。该百分比似乎被视为两位数的百分比。

这是我转换此数据框的功能。目的是删除指定列中百分比> = 50%且百分比<0%且百分比== 0%的所有行;然后按该列降序排列。我确定我可以结合所有drop转换,但是我喜欢此转换的可读性。

def modify_csv():
    df = pd.read_csv("Initial.csv")

    # Delete row if utb > 50%
    df.drop(df[df["column 1"] >= "50%"].index, inplace = True)

    # Delete row if utb == 0%
    df.drop(df[df["column 1"] == "0%"].index, inplace = True)

    # Delete row if utb == 0%
    df.drop(df[df["column 1"] < "0%"].index, inplace = True)

    # Sort by column 1
    df.sort_values(by = "column 1", ascending = False, inplace = True)

    df.to_csv("Final.csv", na_rep = 0, index = False)

这是我最近一次运行的“第1列”的输出:

49%
48%
47%
45%
39%
36%
27%
19%
17%
111%
104%

一切正常,除了您可以看到111%和104%被当作11%和10%一样对待时,我们正在逐步进行排序。任何见识将不胜感激!我在网上搜寻,但找不到任何类似的案例。感谢帮助!

2 个答案:

答案 0 :(得分:2)

排序顺序的原因不是因为将其视为两位数百分比,而是因为将数据视为字符串。按字典顺序比较字符串。

致电read_csv时需要设置dtype argument,以确保您的数据被视为数字。您可能还需要使用converters来去除百分号。

答案 1 :(得分:1)

在进行数字比较之前,请将数字字符串转换为数字:

          0   1
0  value_11  12
1  value_12  25
2  value_13  30
3  value_14  45
4  value_15  60
0  value_21  15
1  value_22  21
2  value_23  31