我有一个如下所示的列表:
[u'first ', u'second ']
我想要一个看起来像这样的文件:
first second
每行中的文件条目应以制表符分隔。这是我做的:
with open ('output','wb') as f1:
f1.write('COLUMN1'+'\t'+'COLUMN2'+'\n')
for element in mylist:
f1.write(element+'\t')
f1.write('\n')
打开文件时,文件看起来没问题。但是,当我在熊猫中打开它时:
tmp=pd.read_csv('output',delimiter='\t')
print tmp.head()
一切都搞砸了:
COLUMN1 COLUMN2
0 first second NaN
我做错了什么?
答案 0 :(得分:1)
假设列中的值本身不包含空格,您可以使用\s+
为列之间的分隔符设置 1或更多空格正则表达式模式:
In [87]: pd.read_table('output', delimiter=r'\s+')
Out[87]:
COLUMN1 COLUMN2
0 first second
因此,可能无需更改output
的创建方式。
答案 1 :(得分:0)
我建议使用csv writer来制作csv。例如:
header = ['COLUMN1', 'COLUMN2']
mylist = [[u'first ', u'second '],
[u'val1 ', u'val2 ']]
with open('out.csv', 'wb') as f:
csvwriter = csv.writer(f, delimiter='\t')
csvwriter.writerow(header)
for row in mylist:
csvwriter.writerow([c.strip() for c in row])
import pandas as pd
tmp = pd.read_csv('out.csv', delimiter='\t')
打印(TMP)
这导致:
COLUMN1 COLUMN2
0 first second
1 val1 val2
如果您不想使用csv,请执行以下操作:
with open ('out.csv','w') as f1:
f1.write('COLUMN1'+'\t'+'COLUMN2'+'\n')
for row in mylist:
f1.write("\t".join(v.strip() for v in row) + "\n")