如何使用python在csv的特定列中逐行添加一些文本
请用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 -
这些列中每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)