我尝试将大型数据框打印到csv文件,但标签分隔sep='\t'
不起作用。然后我用换行符sep='\n'
进行测试,似乎工作正常,用换行符打破所有元素。这可能有什么问题?
代码非常简单,如
df_M.to_csv('report'+filename, header=True, sep='\t', index=False)
数据示例(蛋白质列非常长),我在|
"protein | cl | pept | [M] | [M+1H+]1+ | [M+2H+]2+"
"ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - Homo sapiens (Human)| 0| AWAVAR| 672.37072| 673.378| out-of-range"
"ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - Homo sapiens (Human)| 0| TPVSDR| 673.3394900000002| 674.3467700000002| out-of-range"
"ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - Homo sapiens (Human)| 0| NYAEAK| 694.3285900000001| 695.3358700000001| out-of-range"
"
答案 0 :(得分:0)
您可以尝试使用
df_M.to_csv('report'+filename, header=True, sep='\t', index=False, encoding='utf-8')
您还可以在此处查看Pandas Data Frame to_csv with more separator
或者它可能是版本问题,因为我无法重现问题,请参阅pd.__version__
,前提是最后一个是' 0.21.0'
希望这很有用
答案 1 :(得分:0)
问题是所有行都在"
中,然后获得一列DataFrame
。
因此quoting=3
需要QUOTE_NONE
,然后strip
删除尾随"
:
df_M= pd.read_csv('test.csv', sep='|', quoting=3, skipinitialspace=True)
df_M.iloc[:, 0] = df_M.iloc[:, 0].str.strip('"')
df_M.iloc[:, -1] = df_M.iloc[:, -1].str.strip('"')
df_M.columns = df_M.columns.str.strip('"')
print (df_M)
protein cl pept \
0 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 AWAVAR
1 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 TPVSDR
2 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 NYAEAK
[M] [M+1H+]1+ [M+2H+]2+
0 672.37072 673.37800 out-of-range
1 673.33949 674.34677 out-of-range
2 694.32859 695.33587 out-of-range
另一种解决方案是将数据读取到一列,然后split
:
df = pd.read_csv('test.csv', sep='^')
cols = df.columns.str.split('|').tolist()
df_M = df.iloc[:, 0].str.split('|', expand=True)
df_M.columns = cols
print (df_M)
protein cl pept \
0 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 AWAVAR
1 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 TPVSDR
2 ALBU_HUMAN_UPS Serum albumin (Chain 26-609) - ... 0 NYAEAK
[M] [M+1H+]1+ [M+2H+]2+
0 672.37072 673.378 out-of-range
1 673.3394900000002 674.3467700000002 out-of-range
2 694.3285900000001 695.3358700000001 out-of-range
最后to_csv
工作得很好:
df_M.to_csv('report'+filename, header=True, sep='\t', index=False)
答案 2 :(得分:0)
您是将数据保存为.tsv格式吗? 您的数据是tsv文件,因为您使用'\ t'分隔数据,这是tab。 csv文件必须用“,”分隔。
如果您想以.csv格式保存数据,则需要用“,”
分隔.csv RFC的链接。 http://www.ietf.org/rfc/rfc4180.txt