在行和列上迭代并根据条件替换值
- 在整个熊猫数据框架中,我们如何将所有数字值除以10到100之间?
条件:
- 时间或任何要忽略的非数字列。
- 这些数字可以位于任何行或列中。
时间 | N1 | N2 | N3 | N4 |
---|---|---|---|---|
11:50 | 1 | 2 | 3 | 40 |
12:50 | 5 | 6 | 70 | 8 |
13:50 | 80 | 7 | 6 | 500 |
如果需要,请使用此代码:
import pandas as pd
import numpy as np
time = ['11:50', '12:50', '13:50']
data_1 = {'time': time,
'n1': [1, 5, 80],
'n2': [2, 6 ,7],
'n3': [3, 70 ,6],
'n4': [40, 8, 500],
}
df1 = pd.DataFrame(data = data_1)
df1
尝试1:它似乎无法正常工作
j = 0
k = 0
for i in df:
if df[j][k] > 10 and df[j][k] < 100:
df[j][k] = df[j][k] / 10
j = j + 1
else:
pass;
k = k + 1
预期结果:
- ,因为80、70、40是10之间的数字和100,在同一数据框架中,它们都被X/10所取代。
- 80 - &GT; 80/10 = 8
- 70-&GT; 70/10 = 7
- 40 - &GT; 40/10 = 4
- 整个时间列被忽略,因为它是非数字值。
- How do we divide all numeric values by 10 in the entire pandas dataframe lying between 10 and 100?
conditions:
- Time or any non-numeric column to be ignored.
- The numbers can lie in any row or column.
time | n1 | n2 | n3 | n4 |
---|---|---|---|---|
11:50 | 1 | 2 | 3 | 40 |
12:50 | 5 | 6 | 70 | 8 |
13:50 | 80 | 7 | 6 | 500 |
Use this code if need be:
import pandas as pd
import numpy as np
time = ['11:50', '12:50', '13:50']
data_1 = {'time': time,
'n1': [1, 5, 80],
'n2': [2, 6 ,7],
'n3': [3, 70 ,6],
'n4': [40, 8, 500],
}
df1 = pd.DataFrame(data = data_1)
df1
Try 1: It doesn't seem to work
j = 0
k = 0
for i in df:
if df[j][k] > 10 and df[j][k] < 100:
df[j][k] = df[j][k] / 10
j = j + 1
else:
pass;
k = k + 1
Expected Result:
- Since 80, 70, 40 are the numbers lying between 10 and 100, they are all replaced by x/10 in the same dataframe.
- 80 --> 80/10 = 8
- 70 --> 70/10 = 7
- 40 --> 40/10 = 4
- Entire column of time is ignored as it is non-numeric value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
dataframe.applymap
在使用大数据集时非常慢,它的扩展不佳。如果可能,您应该始终寻找矢量化解决方案。在这种情况下,您可以掩盖10到100之间的值,并使用
dataframe.mask
(或dataFrame.Where
如果您否定条件)。输出:
设置:
Using
DataFrame.applymap
is pretty slow when working with a big data set, it doesn't scale well. You should always look for a vectorized solution if possible.In this case, you can mask the values between 10 and 100 and perform the conditional replacement using
DataFrame.mask
(orDataFrame.where
if you negate the condition).Output:
Setup:
这项工作是:
Does this work:
您可以选择具有数字数据类型的列,请使用
.applymap()
执行除法操作,然后将其重新分配回原始dataFrame。值得注意的是,这不需要硬编码您要预先转换的列:此输出:
You can select the columns which have numeric datatypes, use
.applymap()
to perform the division operation, and then reassign back to the original dataframe. Notably, this doesn't require hardcoding the columns you want to transform in advance:This outputs:
尝试以下
输出:
Try the following
Output: