将列值添加到正在进行的行中,直到新的列值

2024-06-11 12:56:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须与csv有以下格式的工作

Foo
Col1,Col2,Col3,Col4
value1,value2,value3,value4
value1,value2,value3,value4
Bar
value1,value2,value3,value4
value1,value2,value3,value4
... 

当我使用pandasread_csv函数时,这个文件作为一列csv读入。FooBar和其他几个值之间的行数不一致

所需的输出应采用以下形式

    newCol,Col1,Col2,Col3,Col4
    Foo,value1,value2,value3,value4
    Foo,value1,value2,value3,value4
    Bar,value1,value2,value3,value4
    Bar,value1,value2,value3,value4

当我尝试my_dataframe.stack()时,它会将Foo插入到每一行和Bar中,并忽略所有其他值。有没有一种方法可以使用熊猫,甚至只是一些正则表达式的方法来得到我想要的


Tags: csv方法函数foo格式barcol2col3
2条回答
import csv
with open('data', 'r', newline='') as f,  open('data_out.csv', 'w', newline='') as f_out:
    reader = csv.reader(f)
    # read headers
    headers = next(reader)
    # insert new column name
    headers.insert(0,"NewCol")

    w = csv.writer(f_out, delimiter=',')
    # write headers
    w.writerow(headers)

    for line in f:
        if ',' not in line:
            newcolumn = line.strip()
        else:
            line = newcolumn + ',' + line.strip()
            line = line.split(',')
            w.writerow(line)

data_out.csv

NewCol,Col1,Col2,Col3,Col4
Foo,value1,value2,value3,value4
Foo,value1,value2,value3,value4
Bar,value1,value2,value3,value4
Bar,value1,value2,value3,value4

您可以通过一种简单的方法来实现这一点:

with open("your_file") as f:
    my_val = ""
    header = ""
    for i,line in enumerate(f):
        line = line.split(",")
        if len(line)==1:
            my_val = line[0]
        elif i==1:
            header = "newCol," + ",".join(line)
            print header
        else:
            print "{},{}".format(my_val, ",".join(line))

相关问题 更多 >