python 中未硬编码的条件
Conditions in python that are not hard-coded
我正在尝试寻找一种方法来表示 np.where()
的条件,而不是在代码中。在我下面的示例中,
import pandas as pd
import numpy as np
file='insert path'
df = pd.read_csv(file)
df.loc[:, ['col_a','col_b']] = df.loc[:, ['col_a','col_b']].astype(str)
dfseg=df['col_a']+'-'+df['col_b']+'-'+df['col_c']
df['col_d'] = np.where((df['col_a']=='101')|(df['col_a']=='337')|(df['col_a']=='524'),dfseg,df['col_a'])
df
条件是
一个。 df['col_a']=='101' 或
b。 df['col_a']=='337' 或
c。 df['col_a']=='524'
有什么方法可以在代码外部表示这些条件?还是通过另一个pythonmethod/function? tkinter
可以提取这部分代码并编辑这些条件吗?希望找到一种方法可以在外部而不是在脚本中审查和管理这些条件等。
我已经尝试了 np.isin()
和 np.in1d
但收到了错误的结果:
print(np.in1d(df1['col_a'],df2['col_a']))
print(np.isin(df1['col_a'],df2['col_a']))
输出:
[False False False False False False]
[False False False False False False]
来自以下内容:
df2:
col_a
0 101
1 524
2 337
df1:
col_a col_b col_c
0 101 104 AAB
1 337 103 CAD
2 524 204 DER
3 129 404 EEH
4 842 108 HHR
5 337 108 HHE
df2[col_a].isin df1[col_a]
0 False
1 False
2 False
3 False
4 False
5 False
Name: col_a, dtype: bool
df1[col_a].isin df2[col_a]
0 True
1 True
2 True
Name: col_a, dtype: bool
使用
将 df 转换为 numpy
df1numpy = df1.to_numpy()
类似地产生了与 np.isin()
的所有“错误”匹配。谢谢你的想法。
原来df转numpy后,数组也需要转置:
df1numpy1stcol = np.transpose(df1numpy)[0]
(df2不需要转成numpy,下面更新)
然后,从对象更改数据类型:
df1numpy1stcol.astype(np.int32)
最后,np.where()
可以与 np.isin()
一起使用:
df1['col_d'] = np.where(np.isin(df1numpy1stcol.astype(np.int32),df2),
dfseg,df1['col_a'])
因此,df1 [输出]为:
col_a
col_b
col_c
col_d
0
101
104
AAB
101-104-AAB
1
337
103
CAD
337-103-CAD
2
524
204
DER
524-204-DER
3
129
404
EEH
129
4
842
108
HHR
842
5
337
108
HHE
337-108-HHE
例外列表现在表示为名为“df2”的可编辑列表。
我正在尝试寻找一种方法来表示 np.where()
的条件,而不是在代码中。在我下面的示例中,
import pandas as pd
import numpy as np
file='insert path'
df = pd.read_csv(file)
df.loc[:, ['col_a','col_b']] = df.loc[:, ['col_a','col_b']].astype(str)
dfseg=df['col_a']+'-'+df['col_b']+'-'+df['col_c']
df['col_d'] = np.where((df['col_a']=='101')|(df['col_a']=='337')|(df['col_a']=='524'),dfseg,df['col_a'])
df
条件是
一个。 df['col_a']=='101' 或
b。 df['col_a']=='337' 或
c。 df['col_a']=='524'
有什么方法可以在代码外部表示这些条件?还是通过另一个pythonmethod/function? tkinter
可以提取这部分代码并编辑这些条件吗?希望找到一种方法可以在外部而不是在脚本中审查和管理这些条件等。
我已经尝试了 np.isin()
和 np.in1d
但收到了错误的结果:
print(np.in1d(df1['col_a'],df2['col_a']))
print(np.isin(df1['col_a'],df2['col_a']))
输出:
[False False False False False False]
[False False False False False False]
来自以下内容:
df2:
col_a
0 101
1 524
2 337
df1:
col_a col_b col_c
0 101 104 AAB
1 337 103 CAD
2 524 204 DER
3 129 404 EEH
4 842 108 HHR
5 337 108 HHE
df2[col_a].isin df1[col_a]
0 False
1 False
2 False
3 False
4 False
5 False
Name: col_a, dtype: bool
df1[col_a].isin df2[col_a]
0 True
1 True
2 True
Name: col_a, dtype: bool
使用
将 df 转换为 numpydf1numpy = df1.to_numpy()
类似地产生了与 np.isin()
的所有“错误”匹配。谢谢你的想法。
原来df转numpy后,数组也需要转置:
df1numpy1stcol = np.transpose(df1numpy)[0]
(df2不需要转成numpy,下面更新)
然后,从对象更改数据类型:
df1numpy1stcol.astype(np.int32)
最后,np.where()
可以与 np.isin()
一起使用:
df1['col_d'] = np.where(np.isin(df1numpy1stcol.astype(np.int32),df2),
dfseg,df1['col_a'])
因此,df1 [输出]为:
col_a | col_b | col_c | col_d | |
---|---|---|---|---|
0 | 101 | 104 | AAB | 101-104-AAB |
1 | 337 | 103 | CAD | 337-103-CAD |
2 | 524 | 204 | DER | 524-204-DER |
3 | 129 | 404 | EEH | 129 |
4 | 842 | 108 | HHR | 842 |
5 | 337 | 108 | HHE | 337-108-HHE |
例外列表现在表示为名为“df2”的可编辑列表。