Num*_*uis 10 python regex pandas
我想将某些列中与正则表达式匹配的所有值除以某个值,并且仍然具有完整的数据帧.
可以在这里找到:如何通过regex从数据框中选择列,例如,所有以d开头的列都可以选择:
df.filter(regex=("d.*"))
Run Code Online (Sandbox Code Playgroud)
现在我选择了我需要的列,我希望例如将值除以2.可以使用以下代码:
df.filter(regex=("d.*")).divide(2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试像这样更新我的数据帧,它会给出一个can't assign to function call
:
df.filter(regex=("d.*")) = df.filter(regex=("d.*")).divide(2)
Run Code Online (Sandbox Code Playgroud)
如何正确更新我现有的df?
piR*_*red 12
以下技术不限于与滤波器一起使用,并且可以更广泛地应用.
设置
我将使用@cᴏʟᴅsᴘᴇᴇᴅ设置
让我们df
:
d1 d2 abc
0 5 1 8
1 13 8 6
2 9 4 7
3 9 16 15
4 1 20 9
Run Code Online (Sandbox Code Playgroud)
Inplace update
Use 将获取参数dataframe并更改索引和列值与参数匹配的调用数据帧.pd.DataFrame.update
update
df.update(df.filter(regex='d.*') / 3)
df
d1 d2 abc
0 1.666667 0.333333 8
1 4.333333 2.666667 6
2 3.000000 1.333333 7
3 3.000000 5.333333 15
4 0.333333 6.666667 9
Run Code Online (Sandbox Code Playgroud)
内联副本
使用
我使用双splat 将参数数据框解压缩到一个字典中,其中列名是键,而作为列的系列是值.这与所需的签名匹配并覆盖生成的副本中的那些列.简而言之,这是调用数据帧的副本,其中列被适当地覆盖. pd.DataFrame.assign
**
assign
df.assign(**df.filter(regex='d.*').div(3))
d1 d2 abc
0 1.666667 0.333333 8
1 4.333333 2.666667 6
2 3.000000 1.333333 7
3 3.000000 5.333333 15
4 0.333333 6.666667 9
Run Code Online (Sandbox Code Playgroud)
我认为您需要提取列名称并分配:
df[df.filter(regex=("d.*")).columns] = df.filter(regex=("d.*")).divide(2)
Run Code Online (Sandbox Code Playgroud)
要么:
cols = df.columns[df.columns.str.contains('^d.*')]
df[cols] /=2
Run Code Online (Sandbox Code Playgroud)
使用df.columns.str.startswith
.
c = df.columns.str.startswith('d')
df.loc[:, c] /= 2
Run Code Online (Sandbox Code Playgroud)
举个例子,考虑 -
df
d1 d2 abc
0 5 1 8
1 13 8 6
2 9 4 7
3 9 16 15
4 1 20 9
c = df.columns.str.startswith('d')
c
array([ True, True, False], dtype=bool)
df.loc[:, c] /= 3 # 3 instead of 2, just for example
df
d1 d2 abc
0 1.666667 0.333333 8
1 4.333333 2.666667 6
2 3.000000 1.333333 7
3 3.000000 5.333333 15
4 0.333333 6.666667 9
Run Code Online (Sandbox Code Playgroud)
如果您需要传递正则表达式,请使用str.contains
-
c = df.columns.str.contains(p) # p => your pattern
Run Code Online (Sandbox Code Playgroud)
其余的代码如下.