python字典创建新的数据帧列

2024-05-28 00:33:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个字典,其中包含两个独立文件中两列的唯一值。这两列具有格式不同的等效值,因此无法正确合并。你知道吗

数据帧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

我试图使用熊猫.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

我错过了什么?你知道吗


Tags: 文件数据mapdictionary字典产品格式nan
2条回答

从理论上讲,你所尝试的应该是有效的。但是,您必须仔细注意s['A']中值的类型和d中键的类型,以免它们之间的比较不相等。例如,如果s['A']包含字符串,而d.keys()包含int,那么

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
for key,value in d.iteritems():
    A.ix[A['A']==key,'C'] = value 

假设您的第一个数据帧名为“A”,那么您的字典名为“d”

相关问题 更多 >