我正在尝试使用.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
答案 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))