【发布时间】:2018-02-19 16:05:54
【问题描述】:
我仍然对 pandas 数据帧如何处理应用于整个数据帧切片的函数感到非常困惑。这就是我想做的事情..
我有一个数据框(通常会更大,列更多!)
>> df
one two three
0 NaN 0.0 1000
1 NaN 0.0 2000
2 1.262950e+36 NaN 3000
3 NaN NaN 4000
我想将值 1.262950e+36 裁剪为其他值,例如 1000,这样数据帧中的任何值(第 3 列除外)的值都不会大于 1000。
我的尝试 1
我尝试了以下方法:
df.loc[:, df.columns.tolist()[:-1]].clip(upper=1000, inplace=True)
但它似乎并没有像我们得到的那样工作
>> df
one two three
7317 NaN 0.0 1
7318 NaN 0.0 2
7319 1.262950e+36 NaN 3
7320 NaN NaN 4
我的尝试 2
所以我尝试了复制
df.loc[:, df.columns.tolist()[:-1]] copy.deepcopy(df.loc[:, df.columns.tolist()[:-1]].clip(upper=1000))
这行得通,但显然太长且不可读!
有没有更好、更快、更简洁、更pythonic的方式?
编辑:数据类型
列的dtypes是
>> df.dtypes()
one float64
two float64
three int64
dtype: object
【问题讨论】:
-
我确实在您的第一次尝试中复制了一些非常接近的内容,并且成功了,您的专栏中的
dtypes是什么? (df.dtypes) -
我刚刚更新了我的问题!
-
试试这个:df.loc[:, ['one', 'two']] = df[['one', 'two']].clip(None, 1000)
-
@joaoavf 我刚刚尝试过,它有效!
-
我认为值得一试:
df[df.columns[:-1]].clip(upper=1000)
标签: python pandas dataframe deep-copy