我在pandas数据框中有7列和2557行的数据集。
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 Inlet 6
01-01-13 0.40 0.41 0.36 10.39 0.37 0.47
02-01-13 -15 0.56 71.90 250.98 90.67 40.89
...
我正在尝试将所有负值替换为0,并将所有大于192的值替换为192。我已经成功完成了此操作,但是我得到的新数据框缺少第一行(日期)。我猜它被排除在外了,因为它不被视为数字值?如何获得具有更正数据的新数据框并仍然保留日期列?
我已经尝试过以下问题的答案:How to replace negative numbers in Pandas Data Frame by zero
并编写以下代码:
hrt_data = pd.read_csv(hrtdata_file)
num_hrt = hrt_data._get_numeric_data()
num_hrt[num_hrt < 0] = 0
num_hrt[num_hrt > 192] = 192
答案 0 :(得分:1)
仅将DataFrame.select_dtypes
用于数字数据,然后将DataFrame.clip
用于仅分配回数字列:
print (df)
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 col
0 01-01-13 -0.4 500.41 0.36 0.39 0.37 string1
df1 = df.select_dtypes(np.number)
df[df1.columns] = df1.clip(0, 192)
print (df)
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 col
0 01-01-13 0.0 192.0 0.36 0.39 0.37 string1
提取数字列名称的解决方案,谢谢@yatu:
cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].clip(0, 192)