我创建了一个字典,该字典由两个独立文件中两列的唯一值组成。这两列具有不同格式的等效值,因此不会正确合并。
数据框A:
A B
1 dfg
2 srg
3 sgf
4 sfh
3 srg
6 srg
1 sfg
d={1: 1.102832,
2: 2.102832,
3: 3.102832,
4: 4.102832,
5: 5.102832,
6: 6.102832,
7: 7.102832}
最终产品应如下所示:
A B C
1 dfg 1.102832
2 srg 2.102832
3 sgf 3.102832
4 sfh 4.102832
3 srg 3.102832
6 srg 6.102832
1 sfg 1.102832
我尝试使用pandas.Series.map,如下所示:
s["C"]=s["A"].map(dictionary)
不幸的是我的结果如下:
A B C
1 dfg NaN
2 srg NaN
3 sgf NaN
4 sfh NaN
3 srg NaN
6 srg NaN
1 sfg NaN
我错过了什么?
答案 0 :(得分:0)
for key,value in d.iteritems():
A.ix[A['A']==key,'C'] = value
假设您的第一个数据框名为“A”,您的字典称为“d”
答案 1 :(得分:0)
理论上你所尝试的应该是有用的。但是,您必须特别注意s['A']
中值的类型和d
中的键,以免它们无法平等对比。例如,如果s['A']
包含字符串,而d.keys()
包含整数,则
import pandas as pd
d = {1: 1.102832,
2: 2.102832,
3: 3.102832,
4: 4.102832,
5: 5.102832,
6: 6.102832,
7: 7.102832}
s = pd.DataFrame({
'A':'1 2 3 4 3 6 1'.split(),
'B':'dfg srg sgf sfh srg srg sfg'.split()})
s['C'] = s['A'].map(d)
print(s)
产量
A B C
0 1 dfg NaN
1 2 srg NaN
2 3 sgf NaN
3 4 sfh NaN
4 3 srg NaN
5 6 srg NaN
6 1 sfg NaN
如果您将s['A']
转换为数值:
s['A'] = pd.to_numeric(s['A'], errors='coerce')
s['C'] = s['A'].map(d)
print(s)
然后你得到了理想的结果:
A B C
0 1 dfg 1.102832
1 2 srg 2.102832
2 3 sgf 3.102832
3 4 sfh 4.102832
4 3 srg 3.102832
5 6 srg 6.102832
6 1 sfg 1.102832