Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列值添加到正在进行的行中,直到出现新的列值_Python_Csv_Pandas - Fatal编程技术网

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

Python 将列值添加到正在进行的行中,直到出现新的列值,python,csv,pandas,Python,Csv,Pandas,我必须使用具有以下格式的csv Foo Col1,Col2,Col3,Col4 value1,value2,value3,value4 value1,value2,value3,value4 Bar value1,value2,value3,value4 value1,value2,value3,value4 ... 当我使用pandasread\u csv函数时,此文件将作为一列csv读入。Foo、Bar和其他几个值之间的行数不一致 所需的输出应采用以下形式: newCol,Col

我必须使用具有以下格式的csv

Foo
Col1,Col2,Col3,Col4
value1,value2,value3,value4
value1,value2,value3,value4
Bar
value1,value2,value3,value4
value1,value2,value3,value4
... 
当我使用pandas
read\u csv
函数时,此文件将作为一列csv读入。
Foo
Bar
和其他几个值之间的行数不一致

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

    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
,并忽略所有其他值。有没有一种方法可以使用pandas甚至是一些regex方法来获得我想要的东西?

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

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