繁体   English   中英

python字典创建新的数据框列

[英]python dictionary to create new data frame column

我创建了一个字典,其中包含来自两个单独文件中两列的唯一值。 这两列的等效值格式不同,因此无法正确合并。

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

我想念什么?

for key,value in d.iteritems():
    A.ix[A['A']==key,'C'] = value 

假设您的第一个数据帧称为“ A”,而您的字典称为“ d”

从理论上讲,您尝试过的应该有效。 但是,你必须小心留意的类型中值的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM