我正在尝试添加具有循环结果值的新列,并将这些值分配给每一行的每个新单元格,但是我一直在获取该新列的所有单元格中最后一行的结果。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from os.path import dirname, join, pardir, realpath
import sys
sys.path.append(realpath(join(dirname(__file__), pardir, pardir)))
import pandas as pan
from mrz.generator.td1 import TD1CodeGenerator
data = pan.read_csv('test.csv')
df = pan.DataFrame(data)
#TD1CodeGenerator(row)
for index, col in df.iterrows():
Barcode=TD1CodeGenerator(str(col['Document type']), str(col['Country']), str(col['Document number']), str(col['Birth date']), str(col['Genre']), str(col['Expiry Date']), str(col['Nationality']), str(col['Surname']), str(col['Given name(s)']), str(col['Optional data 1']))
for i in df.iterrows():
df["BARCODE"]=Barcode
df.to_csv('test2.csv')
这是输入的csv文件的图像
input csv file before adding new column
这是新的csv文件
output csv file after adding new column
我希望我的问题很清楚,我不知道诀窍在哪里。
答案 0 :(得分:0)
如果您有多个值,则应使用list()
保留所有值
Barcode = list()
for index, col in df.iterrows():
value = TD1CodeGenerator(...)
Barcode.append(value)
df["BARCODE"] = Barcode
您还应该尝试DataFrame.apply()对每一行运行函数,而不要使用for
循环
def func(col):
return TD1CodeGenerator(str(col['Document type']), str(col['Country']), str(col['Document number']), str(col['Birth date']), str(col['Genre']), str(col['Expiry Date']), str(col['Nationality']), str(col['Surname']), str(col['Given name(s)']), str(col['Optional data 1']))
df["BARCODE"] = df.apply(func, axis=1)