【问题标题】:How to print row and column labels to output csv file如何打印行和列标签以输出 csv 文件
【发布时间】:2020-01-16 22:52:41
【问题描述】:

我有一个 1620 行 7 列的数据集。对于我的完整数据集,我想保留从第一行开始的每 5 行值并删除其他行。所以我想使用 python 在我的 csv 文件中存储第 1、第 6、第 11、第 16 ......等完整数据集的行。

我已经这样做了,并将输出存储到一个 csv 文件,但我没有在我的输出 csv 中获得行和列标签。我想在我的输出 csv 中获取行和列标签。

对此的修改: 我想将行标签设为 1,2,3,4,5..so 而不是 1,6,11,16,21....

数据集:

Serial,A,B,C,D,E,F
1,3.8,-5.9,-1.7,-1.4,8.3,-3.1
2,-5.4,-71.3,83.4,50.7,-1.3,88.4
3,3.0,5.3,1.4,5.7,6.6,2.3
4,0.0,0.0,0.0,0.0,0.0,0.0
5,0.0,0.0,0.0,0.0,0.0,0.0
6,-1.4,2.8,3.5,-6.7,-2.3,1.4
7,88.2,-0.1,-10.7,-36.2,88.1,-1.7
8,3.7,7.0,1.1,2.2,5.9,3.6
9,0.0,0.0,0.0,0.0,0.0,0.0
10,0.0,0.0,0.0,0.0,0.0,0.0
11,3.0,-1.6,-1.7,-4.2,7.8,-9.7
12,-7.1,-48.8,85.7,46.0,-2.8,-80.8
13,2.2,8.5,1.3,9.3,6.1,7.0
14,0.0,0.0,0.0,0.0,0.0,0.0
15,0.0,0.0,0.0,0.0,0.0,0.0
16,3.7,-6.2,-5.1,-2.5,0.0,-1.1
17,0.0,-60.3,88.8,45.1,0.0,90.0
18,2.9,9.3,3.9,8.3,6.9,8.6
19,0.0,0.0,0.0,0.0,0.0,0.0
20,0.0,0.0,0.0,0.0,0.0,0.0
21,3.7,-3.1,-8.3,-1.1,8.7,-3.3

import pandas as pd
import numpy as np

#importing straintest dataset with pandas
dataset=pd.read_csv('ABC.csv')
dataset = dataset.set_index('Serial')

X =dataset.iloc[::5, :].values

np.savetxt('Output.csv', X, delimiter= ',')
print("::::\n",X)


实际输出:

3.8,-5.9,-1.7,-1.4,8.3,-3.1
-1.4,2.8,3.5,-6.7,-2.3,1.4
3,-1.6,-1.7,-4.2,7.8,-9.7
3.7,-6.2,-5.1,-2.5,0,-1.1
3.7,-3.1,-8.3,-1.1,8.7,-3.3

预期输出:

Serial,A,B,C,D,E,F
1,3.8,-5.9,-1.7,-1.4,8.3,-3.1
2,-1.4,2.8,3.5,-6.7,-2.3,1.4
3,3,-1.6,-1.7,-4.2,7.8,-9.7
4,3.7,-6.2,-5.1,-2.5,0,-1.1
5,3.7,-3.1,-8.3,-1.1,8.7,-3.3

【问题讨论】:

    标签: python arrays pandas numpy csv


    【解决方案1】:

    如果需要列名可以使用pandas方法DataFrame.to_csv:

    #remove .values
    X = dataset.iloc[::5]
    X.to_csv('Output.csv')
    

    或者:

    dataset=pd.read_csv('ABC.csv')
    X = dataset.iloc[::5]
    X.to_csv('Output.csv', index=False)
    

    编辑:您可以从0 开始创建默认索引,如有必要,可以从1 添加rename

    X = dataset.iloc[::5].reset_index(drop=True).rename(index = lambda x: x + 1)
    X.to_csv('Output.csv')
    

    或者:

    dataset=pd.read_csv('ABC.csv')
    X = dataset.iloc[::5].copy()
    X['Serial'] = np.arange(1, len(X) + 1) 
    X.to_csv('Output.csv', index=False)
    

    【讨论】:

    • 只是对上面的一个小修改,我希望行标签是 1,2,3,4,5...等等..而不是 1,6,11,16,21 ...
    • 最后一个代码有效。是否可以在不指定标签['Serial'] 的情况下完成,因为标签可能每次都会更改,但相同的代码也可能适用于其他文件。
    • @Axay - 所以可以说需要使用 DataFrame 中的第一列吗?喜欢X.iloc[:, 0] = np.arange(1, len(X) + 1)
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多