我有一个包含一些原始数据的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%一样对待时,我们正在逐步进行排序。任何见识将不胜感激!我在网上搜寻,但找不到任何类似的案例。感谢帮助!
答案 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