【问题标题】:Renaming Duplicates in CSV column in sequence by python通过python按顺序重命名CSV列中的重复项
【发布时间】:2019-02-26 06:28:29
【问题描述】:

我有一个包含重复条目的特定列的 CSV 数据说 像a,b,c,a,b,c,v,f,c ...我想将值替换为 a,b,c,a_1,b_1,c_1,v,f,c_2... 我编写了以下代码来查找重复项:-

import csv
from collections import Counter
import pandas as pd

duplicate_names=[]
file='2018_Akola_August.csv'

with open(file, 'r', newline='') as csv_file:
     occurrences = Counter()
     for line in csv.reader(csv_file):
         email = line[3]
         if email in occurrences:
            print(email)
            duplicate_names.append(email)
            occurrences[email] += 1
         else:
            occurrences[email] = 1

为了替换 CSV 列中的字符串,我编写了如下代码,但是 两个重复值无法正常工作。

df = pd.read_csv(file, index_col=False, header=0)
#Finds 'a' and replaces it with 'a_1'
df.loc[df['Circle'] == 'a' , 'Circle']= 'a_1'
print(df)
df.to_csv(file)

这个说法会产生什么影响还不清楚?

 df.loc[df['Circle'] == 'a' , 'Circle'][]= 'a_1'

如何按顺序重命名这些重复项?

【问题讨论】:

  • 请包含 csv 文件的前几行来说明您的观点,以便我们可以使用此示例数据通过代码回答您。

标签: python-3.x pandas csv duplicates


【解决方案1】:

这里有一个分两步的方法:

>>> df
  Circle
0      a
1      b
2      c
3      a
4      b
5      c
6      v
7      f
8      c

dups = (df.loc[df['Circle'].duplicated(),'Circle'] + '_' +
        df.groupby('Circle').cumcount().astype(str))

df.loc[dups.notnull(),'Circle'] = dups

>>> df
  Circle
0      a
1      b
2      c
3    a_1
4    b_1
5    c_1
6      v
7      f
8    c_2

在回答您的第二个问题时,该行:

df.loc[df['Circle'] == 'a' , 'Circle']= 'a_1'

将取所有等于aCircle 的值并将其更改为a_1

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 2020-07-22
    • 1970-01-01
    • 2019-04-27
    • 2018-03-04
    • 2023-03-04
    • 2016-11-12
    • 2017-04-10
    • 2019-04-19
    相关资源
    最近更新 更多