如何解决如何使用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)?
解决方法
我们:
- 读取文件
- 使用字典来跟踪姓名计数
- 使用计数器的前缀作为罗马数字更新名称
- 再次保存文件
熊猫解决方案
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。