Dataframe .assign()函数在新列中重复输出

时间:2019-08-19 13:31:15

标签: pandas dataframe

我正在尝试使用.assign()作为其他列之一的soundex值向我的df添加新列。使用水母lib可以正常工作。但是我在新列中得到了重复值。就像它采用第一个值,并对新列的所有行使用该第一个值一样。

我已经尝试过两种版本,分别是lambda和不使用lambda。 lambda版本在下面已注释掉,但输出结果相同。

df1 = pd.read_csv('C:\\path\\my.csv', header=0)#.set_index('name1')
df2 = df1.assign(soundexMd5=jellyfish.soundex(str(df1['name1'])))
#df2 = df1.assign(soundexMd5=lambda x: jellyfish.soundex(str(df1['name1'])))
#df2 = df1.assign(soundexMd5=lambda x: jellyfish.soundex(str(x.name1)))
print(df2)

注意,我也注释掉了set_index(),当我这样做时会导致错误。当我使用set_index('name1')时,它抛出: KeyError:“ name1” 在代码.assign行的“ name1”上。

  

当我尝试设置set_index('name1')并运行上面的第3个.assign时,引用x.name1,它报错:   AttributeError:“ DataFrame”对象没有属性“ name1”

源csv看起来像这样:

"name1"
"Yolanda"
"Push Notify"
"Yolanda"
"test1"
"test2"

Yolanda的输出见以下0453,但对所有行都重复。

name1 soundexMd5
0                     Yolanda       0453
1                 Push Notify       0453
2                     Yolanda       0453
3                       test1       0453
4                       test2       0453

1 个答案:

答案 0 :(得分:0)

对每个值使用Series.apply作为运行函数:

df1 = pd.read_csv('C:\\path\\my.csv', header=0)
df2 = df1.assign(soundexMd5=df1['name1'].apply(jellyfish.soundex))

如果需要转换为字符串,请添加Series.astype

df2 = df1.assign(soundexMd5=df1['name1'].astype(str).apply(jellyfish.soundex))