Python 使用pandas to_csv时删除标题中的前导逗号
默认情况下,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
,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”@巴菲