向每行添加具有不同结果值的新列

时间:2019-10-28 20:48:54

标签: python pandas

我正在尝试添加具有循环结果值的新列,并将这些值分配给每一行的每个新单元格,但是我一直在获取该新列的所有单元格中最后一行的结果。

#!/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

我希望我的问题很清楚,我不知道诀窍在哪里。

1 个答案:

答案 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)