Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python在csv的特定列中逐行添加一些文本_Python_Excel_Csv - Fatal编程技术网

如何使用python在csv的特定列中逐行添加一些文本

如何使用python在csv的特定列中逐行添加一些文本,python,excel,csv,Python,Excel,Csv,请用Python解决: 我有一个CSV文件,第一列如下: 这些列中每3行存储一个相同的名称 我想补充一句: 第一行名,带-I, 第二行名,带-II, 第三行名,带-III 第四排第二个名字是-I 示例 我应该加上-I,-II,-III如下: NAME - ROW[1] A-I - ROW[2] A-II - ROW[3] A-III - ROW[4] B-I - ROW[5] B-II - ROW[6] B-III - ROW[7] C-I - ROW[8] C-II -

请用Python解决:

我有一个CSV文件,第一列如下:
这些列中每3行存储一个相同的名称


我想补充一句:
第一行名,带-I,
第二行名,带-II,
第三行名,带-III
第四排第二个名字是-I

示例

我应该加上-I,-II,-III如下:

NAME
 - ROW[1]  A-I
 - ROW[2] A-II
 - ROW[3] A-III
 - ROW[4] B-I
 - ROW[5] B-II
 - ROW[6] B-III
 - ROW[7] C-I
 - ROW[8] C-II
 - ROW[9] C-III
我尝试了以下代码:

    
    import pandas as pd
    f, deldict = pd.read_csv("C:\\Users\\muthu\\Desktop\\Test.csv"), {} 
    f['NAME'] = f['NAME'] +'-I' 
    f = f[['NAME', 'AGE', 'ADDRESS']]   
    print (f)
    f.to_csv('Newtest.csv',index=False) 
上述代码使用“-I”更改了总名列行数据 但是如何逐行添加(-I,-II,-III,-I,-II,-III)以满足我的上述要求?

我们:

  • 读文件
  • 使用字典跟踪名称计数
  • 使用其计数器的前缀作为罗马数字更新名称
  • 再次保存文件
  • 熊猫解决方案

    将熊猫作为pd导入
    从集合导入订单
    #发件人:https://stackoverflow.com/questions/28777219/basic-program-to-convert-integer-to-roman-numerals
    def编号至罗马(num):
    roman=OrderedDict()
    罗马[1000]=“M”
    罗马[900]=“厘米”
    罗曼[500]=“D”
    roman[400]=“CD”
    罗曼[100]=“C”
    罗曼[90]=“XC”
    罗曼[50]=“L”
    roman[40]=“XL”
    罗曼[10]=“X”
    罗马文[9]=“九”
    罗马文[5]=“V”
    罗马文[4]=“四”
    罗曼[1]=“我”
    定义罗马_num(num):
    用罗马字母表示r。键()
    x、 y=divmod(num,r)
    屈服罗马[r]*x
    num-=(r*x)
    
    如果num Hi,
    muthu
    ,欢迎使用StackOverflow。到目前为止你试过什么?如果您向我们展示一些您自己编写的代码,我们可以帮助您。在伪代码中,请执行以下操作:1)逐行读取文件2)在每行末尾使用
    循环附加所需的后缀3)将数据写入文件这是如果名称的顺序类似于[a,a,a,B,B,C,C]:)所附的解决方案更具普遍性,即使在名称顺序切换的情况下也会保持正确@muthu@muthu在PandasIts中添加了另一个解决方案,并取得了成功。非常感谢您的帮助@Aviv Yaniv。
    
        
        import pandas as pd
        f, deldict = pd.read_csv("C:\\Users\\muthu\\Desktop\\Test.csv"), {} 
        f['NAME'] = f['NAME'] +'-I' 
        f = f[['NAME', 'AGE', 'ADDRESS']]   
        print (f)
        f.to_csv('Newtest.csv',index=False) 
    
    import pandas as pd
    
    from collections import OrderedDict
    
    # From: https://stackoverflow.com/questions/28777219/basic-program-to-convert-integer-to-roman-numerals
    def number_to_roman(num):
        roman = OrderedDict()
        roman[1000] = "M"
        roman[900] = "CM"
        roman[500] = "D"
        roman[400] = "CD"
        roman[100] = "C"
        roman[90] = "XC"
        roman[50] = "L"
        roman[40] = "XL"
        roman[10] = "X"
        roman[9] = "IX"
        roman[5] = "V"
        roman[4] = "IV"
        roman[1] = "I"
        def roman_num(num):
            for r in roman.keys():
                x, y = divmod(num, r)
                yield roman[r] * x
                num -= (r * x)
                if num <= 0:
                    break
        return "".join([a for a in roman_num(num)])
    
    filename="sabich.csv"
    
    df = pd.read_csv(filename)
    
    def roman_count_rename_column(df, column_name='Name', start_row=0, seperator='-'):
        names_count = dict()
        for index, row in df.iterrows():
            if index < start_row:
                continue
            name = row[column_name]
            names_count[name] = names_count.get(name, 0) + 1
            df.at[index, column_name] = name + seperator + number_to_roman(names_count[name])
        return df
    
    df = roman_count_rename_column(df)
    df.to_csv(filename)
    
    import openpyxl
    
    filename="sabich.xlsx"
    
    workbook = openpyxl.load_workbook(filename)
    
    from collections import OrderedDict
    
    # From: https://stackoverflow.com/questions/28777219/basic-program-to-convert-integer-to-roman-numerals
    def number_to_roman(num):
        roman = OrderedDict()
        roman[1000] = "M"
        roman[900] = "CM"
        roman[500] = "D"
        roman[400] = "CD"
        roman[100] = "C"
        roman[90] = "XC"
        roman[50] = "L"
        roman[40] = "XL"
        roman[10] = "X"
        roman[9] = "IX"
        roman[5] = "V"
        roman[4] = "IV"
        roman[1] = "I"
        def roman_num(num):
            for r in roman.keys():
                x, y = divmod(num, r)
                yield roman[r] * x
                num -= (r * x)
                if num <= 0:
                    break
        return "".join([a for a in roman_num(num)])
    
    def roman_count_rename_column(sheet, column_position='A', start_row=2, seperator='-'):
        row_number = start_row
        current_cell = sheet[f"{column_position}{row_number}"]
        names_count = dict()
        while current_cell.value:
            print(f'In {column_position}{row_number} value {current_cell.value}')
            # Update name counter
            names_count[current_cell.value] = names_count.get(current_cell.value, 0) + 1
            sheet[f"{column_position}{row_number}"].value = current_cell.value + seperator + number_to_roman(names_count[current_cell.value])
            row_number += 1
            current_cell = sheet[f"{column_position}{row_number}"]
    
    sheet = workbook.active
    roman_count_rename_column(sheet, column_position='A')
    
    workbook.save(filename)