Python 将列值添加到正在进行的行中,直到出现新的列值
我必须使用具有以下格式的csvPython 将列值添加到正在进行的行中,直到出现新的列值,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
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,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