更改熊猫数据框中的值,但保留日期列

时间:2020-04-06 09:47:54

标签: python pandas dataframe replace

我在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

1 个答案:

答案 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)