微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

请在Python中解决

我的CSV文件的第一列是这样的:
这些列中每3行存储了相同的名称


我想添加
第一行的名字--,
第二行带有-II的FirsT名称
第三行带有-III的FirsT名称
还有第四行SECOND名称,带有-I ...

示例

[Column]
 
 NAME

 - ROW[1] A
 - ROW[2] A
 - ROW[3] A
 - ROW[4] B
 - ROW[5] B
 - ROW[6] B
 - ROW[7] C
 - ROW[8] C
 - ROW[9] C

我应该这样添加-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)?

解决方法

我们:

  1. 读取文件
  2. 使用字典来跟踪姓名计数
  3. 使用计数器的前缀作为罗马数字更新名称
  4. 再次保存文件

熊猫解决方案

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)

Excel解决方案

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,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)

输入:
enter image description here

输出:
enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?