大家好,
对于熊猫系列,我需要将字符串中的字符更改为数值,如下所示:
Match Team1 Team2 Winner
0 0 Australia England Australia
2 2 India Australia Australia
3 3 England India England
我尝试过mapping将数据框添加到字典中,但这仅考虑了整个字符串,而不是每个字符。然后我尝试将字符串映射到元组,然后再映射到字典,但这也没有用。
答案 0 :(得分:4)
您可以通过dict.get()
进行此操作:
s = pd.Series(df)
s.apply(lambda x: ''.join([str(num_dict.get(i)) for i in list(x)]))
0 3323332233132333
1 3121122313312112
2 3112332321311233
3 3111111111111111
4 3231232312323123
5 3223213331233312
6 3132131321313213
7 3223221211122322
8 3133221332213322
9 3231212312123121
10 3111121111211112
11 3122211222112221
12 3121331213312133
13 3123321233222123
14 3321313213132131
15 3131221312213122
16 3313233322231323
17 3312332122231233
18 3112211122111221
dtype: object
注意:如果您希望数字不是数字,而是字符串,那么以后可以s=pd.to_numeric(s,errors='coerce')
答案 1 :(得分:1)
使用正则表达式。
例如:
import re
num_dict = {'+':1, '-':2, 'F':3}
pattern = re.compile("("+"|".join(re.escape(i) for i in num_dict) + ")")
df = pd.DataFrame({"Col": data})
df["Col"] = df["Col"].apply(lambda x: pattern.sub(lambda y: str(num_dict[y.group(1)]), x))
print(df)
输出:
Col
0 3323332233132333
1 3121122313312112
2 3112332321311233
3 3111111111111111
4 3231232312323123
5 3223213331233312
6 3132131321313213
7 3223221211122322
8 3133221332213322
9 3231212312123121
10 3111121111211112
11 3122211222112221
12 3121331213312133
13 3123321233222123
14 3321313213132131
15 3131221312213122
16 3313233322231323
17 3312332122231233
18 3112211122111221
答案 2 :(得分:1)
快速:
将str.replace
与可调用
s.str.replace(r'\+|\-|F', lambda m: str(num_dict[m.group(0)]))
慢:
使用str.split
扩展到列,并使用replace
,agg
将其连接回字符串:
s.str.split('', expand=True).replace(num_dict).astype(str).agg(''.join, axis=1)
Out[296]:
0 3323332233132333
1 3121122313312112
2 3112332321311233
3 3111111111111111
4 3231232312323123
5 3223213331233312
6 3132131321313213
7 3223221211122322
8 3133221332213322
9 3231212312123121
10 3111121111211112
11 3122211222112221
12 3121331213312133
13 3123321233222123
14 3321313213132131
15 3131221312213122
16 3313233322231323
17 3312332122231233
18 3112211122111221
dtype: object
答案 3 :(得分:0)
这可能不是最优雅的方法,但它应该可以工作。 您可以使用Python的内置replace()函数。
通过这种方式,您可以遍历列表,并对要替换的每个字符应用replace()函数。
df_transformed = []
for line in df:
df_transformed.append(int(line.replace('F', '3').replace('-', '2').replace('+', '1')))
这样,您将获得所描述的转换后的数据帧。
很抱歉格式化不正确。我在手机上输入了此信息,但是只要有计算机,我就会对其进行编辑。