Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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 使用pandas to_csv时删除标题中的前导逗号_Python_Pandas_Dataframe_Export To Csv - Fatal编程技术网

Python 使用pandas to_csv时删除标题中的前导逗号

Python 使用pandas to_csv时删除标题中的前导逗号,python,pandas,dataframe,export-to-csv,Python,Pandas,Dataframe,Export To Csv,默认情况下,csv写入类似于 ,a,b,c 0,0.0,0.0,0.0 1,0.0,0.0,0.0 2,0.0,0.0,0.0 但我希望它写得像这样: a,b,c 0,0.0,0.0,0.0 1,0.0,0.0,0.0 2,0.0,0.0,0.0 我如何做到这一点?我无法设置index=False,因为我想保留索引。我只想删除前面的逗号 df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c']) df.to_csv("test.cs

默认情况下,csv写入类似于

,a,b,c
0,0.0,0.0,0.0
1,0.0,0.0,0.0
2,0.0,0.0,0.0
但我希望它写得像这样:

a,b,c
0,0.0,0.0,0.0
1,0.0,0.0,0.0
2,0.0,0.0,0.0
我如何做到这一点?我无法设置
index=False
,因为我想保留索引。我只想删除前面的逗号

df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'])
df.to_csv("test.csv") # this results in the first example above.

只需为索引设置一个名称:
df.index.name='blah'
。此名称将在标题中显示为第一个名称

import numpy as np
import pandas as pd

df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'])
df.index.name = 'my_index'
print(df.to_csv())
屈服

my_index,a,b,c
0,0.0,0.0,0.0
1,0.0,0.0,0.0
2,0.0,0.0,0.0

但是,如果(根据您的评论)您希望在标题中有3个由coma分隔的名称,而在csv的行中有4个由coma分隔的值,那么您必须手工创建它。但它将不符合任何csv标准格式。

或者,尝试重置索引,使其成为数据框中的一列,名为index。这也适用于多个索引

df = df.reset_index()
df.to_csv('output.csv', index = False)

在追加模式下,可以先写入不带索引的列,然后写入不带标题的数据:

df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'], index=list('XYZ'))

pd.DataFrame(columns=df.columns).to_csv("test.csv", index=False)
#alternative for empty df
#df.iloc[:0].to_csv("test.csv", index=False)
df.to_csv("test.csv", header=None, mode='a')

df = pd.read_csv("test.csv")
print (df)
     a    b    c
X  0.0  0.0  0.0
Y  0.0  0.0  0.0
Z  0.0  0.0  0.0

您不想删除前导的逗号,或者所有其他列都向左移动,因为csv是一个逗号分隔的值文本文件。@Parfait上面示例中的第二个数据框工作得非常好。试试看
pd.read\u csv(“test.csv”)
(其中test.csv是第二个示例)。仔细查看所需的结果,这正是我提到的。列A不再与原始值对齐,而是向左移动,最后一列没有标题!这意味着索引未命名,
pd.read\u csv
正确解释了该含义。我知道这肯定不是最佳实践,我不建议任何人这样做,但出于一些遗留原因,我需要这样做@Parfait已理解,但请注意,除了
pandas
,在其他应用程序/语言中阅读此csv(根据下面接受的答案)将导致列移位。我有一种感觉,这是一场灾难。你真正的问题应该是如何处理遗留问题!我还没有遇到打破最佳实践的用例。祝你好运和快乐!我希望标题是“a,b,c”,而不是“我的索引,a,b,c”@巴菲