我有一个数据框,在其中我需要一次更改一列的值,这样它就不会在其他列中更改相同的值
数据集:
Col-a Col-b Col-c
val1 abc val1
val2 bca bca
bca zzs
val2 val2
val3 xyz zzs
代码:
import pandas as pd
df=pd.read_csv('/home/fileName.csv')
changeVal=[Col-a, Col-c]
for v in changeVal:
n=0
unCl=df[v].unique()
for x in unCl:
nV="{0}{1}".format(v,n)
df=df.replace(v,nV)
n=n+1
预期的输出:在这里,我为变量changeVal
中存在的列取唯一值,然后用ColumnName和序列号对其进行更改,然后在整个数据帧中替换该值。问题是,当我确实替换时,它也会从其他列更改相同的值,而我想一次修改一个列。
Col-a Col-b Col-c
Col-a0 abc Col-c0
Col-a1 bca Col-c1
bca Col-c2
Col-a1 Col-c3
Col-a2 xyz Col-c2
答案 0 :(得分:1)
假设df如下:
df:
Col-a Col-b Col-c
0 val1 abc val1
1 val2 bca bca
2 NaN bca zzs
3 val2 NaN val2
4 val3 xyz zzs
将pd.factorize()
与格式一起使用会给我们:
df_new=pd.DataFrame({'Col-a':['Col-a{}'.format(i) for i in list(pd.factorize(df['Col-a'])[0])],'Col-b':df['Col-b'].values.tolist(),'Col-c':['Col-c{}'.format(i) for i in list(pd.factorize(df['Col-c'])[0])]})
>>df_new
Col-a Col-b Col-c
0 Col-a0 abc Col-c0
1 Col-a1 bca Col-c1
2 Col-a-1 bca Col-c2
3 Col-a1 NaN Col-c3
4 Col-a2 xyz Col-c2
请注意,pd.factorize
默认将NaN
视为-1
,因此Col-a中的第2行的值为-1。因此,您可以根据需要在执行上述代码之前先将其删除。
希望这会有所帮助。