使用熊猫更改列明智的数据

时间:2019-01-08 04:34:50

标签: python pandas

我有一个数据框,在其中我需要一次更改一列的值,这样它就不会在其他列中更改相同的值

数据集:

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

1 个答案:

答案 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。因此,您可以根据需要在执行上述代码之前先将其删除。

希望这会有所帮助。