使用 Python 识别包含特定字符串的单元格并用数字覆盖内容
Identify cells containing specific strings and overwrite content with numbers using Python
我有一个如下所示的数据框:
我的目标是识别每列的每个单元格是否包含以下字符串:'KSS'
、'ABC'
、'DEF'
、'ABC / DEF'
、'KSS / DEF'
随后我想用以下值替换内容:'KSS'
-> 100,'ABC'
-> 200,'DEF'
-> 300,'ABC / DEF'
-> 400,'KSS / DEF'
-> 500
输出应该是这样的:
注意:该算法应该是通用的并且检查每一列,而不仅仅是数字 3。为了完整起见,数据类型都是 objects
.
到目前为止我的代码行是这些,但我想它们是不完整的...
import pandas as pd
import numpy as np
df = pd.DataFrame([
['XYZ', 'BALSO', 'PISCO', 'KSS', 'Yes', 660, 'Cop'],
['XYZ', 'TONTO', 'LOLLO', '195', 500, 'Yes', 'nan'],
['XYZ', 'CALLO', 'WANDA', 'ABC / DEF', 'Yes', 500, 'nan'],
['XYZ', 'AZUNGO', 'FINGI', 'KSS / DEF', 'Yes', 500, 'nan']
])
df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None, low_memory=False)
df.str.replace('KSS|ABC|DEF','?')
如果您使用查找值和替换值创建一个字典,那么您可以在此列上调用 map
,另外您需要将 na_action='ignore'
传递给 map
,否则您会得到一个 KeyError
对于缺失值,另外你会注意到,因为你有缺失值,这些值会转换为 float
但你可以稍后使用 astype(int)
再次转换:
In [182]:
d={'KSS':100, 'ABC' :200, 'DEF' : 300, 'ABC / DEF' : 400, 'KSS / DEF' : 500}
df[3] = df[3].map(d, na_action='ignore')
df
Out[182]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100.00 660 Cop
1 XYZ TONTO LOLLO nan 500 nan
2 XYZ CALLO WANDA 400.00 500 nan
3 XYZ AZUNGO FINGI 500.00 500 nan
这里我们使用 astype
:
转换类型
In [178]:
df[3] = df[3].astype(int)
df
Out[178]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100 660 Cop
1 XYZ TONTO LOLLO 195 500 nan
2 XYZ CALLO WANDA 400 500 nan
3 XYZ AZUNGO FINGI 500 500 nan
我有一个如下所示的数据框:
我的目标是识别每列的每个单元格是否包含以下字符串:'KSS'
、'ABC'
、'DEF'
、'ABC / DEF'
、'KSS / DEF'
随后我想用以下值替换内容:'KSS'
-> 100,'ABC'
-> 200,'DEF'
-> 300,'ABC / DEF'
-> 400,'KSS / DEF'
-> 500
输出应该是这样的:
注意:该算法应该是通用的并且检查每一列,而不仅仅是数字 3。为了完整起见,数据类型都是 objects
.
到目前为止我的代码行是这些,但我想它们是不完整的...
import pandas as pd
import numpy as np
df = pd.DataFrame([
['XYZ', 'BALSO', 'PISCO', 'KSS', 'Yes', 660, 'Cop'],
['XYZ', 'TONTO', 'LOLLO', '195', 500, 'Yes', 'nan'],
['XYZ', 'CALLO', 'WANDA', 'ABC / DEF', 'Yes', 500, 'nan'],
['XYZ', 'AZUNGO', 'FINGI', 'KSS / DEF', 'Yes', 500, 'nan']
])
df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None, low_memory=False)
df.str.replace('KSS|ABC|DEF','?')
如果您使用查找值和替换值创建一个字典,那么您可以在此列上调用 map
,另外您需要将 na_action='ignore'
传递给 map
,否则您会得到一个 KeyError
对于缺失值,另外你会注意到,因为你有缺失值,这些值会转换为 float
但你可以稍后使用 astype(int)
再次转换:
In [182]:
d={'KSS':100, 'ABC' :200, 'DEF' : 300, 'ABC / DEF' : 400, 'KSS / DEF' : 500}
df[3] = df[3].map(d, na_action='ignore')
df
Out[182]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100.00 660 Cop
1 XYZ TONTO LOLLO nan 500 nan
2 XYZ CALLO WANDA 400.00 500 nan
3 XYZ AZUNGO FINGI 500.00 500 nan
这里我们使用 astype
:
In [178]:
df[3] = df[3].astype(int)
df
Out[178]:
0 1 2 3 4 5
0 XYZ BALSO PISCO 100 660 Cop
1 XYZ TONTO LOLLO 195 500 nan
2 XYZ CALLO WANDA 400 500 nan
3 XYZ AZUNGO FINGI 500 500 nan