如何在csv文件中转置数据集?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在csv文件中转置数据集?相关的知识,希望对你有一定的参考价值。

例如,我想改造:

Name,Time,Score
Dan,68,20
Suse,42,40
Tracy,50,38

成:

Name,Dan,Suse,Tracy
Time,68,42,50
Score,20,40,38

编辑:原始问题错误地使用术语“转置”。

答案

如果整个文件内容适合内存,则可以使用

import csv
from itertools import izip
a = izip(*csv.reader(open("input.csv", "rb")))
csv.writer(open("output.csv", "wb")).writerows(a)

您基本上可以将zip()izip()视为转置操作:

a = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]
zip(*a)
# [(1, 4, 7),
#  (2, 5, 8),
#  (3, 6, 9)]

izip()避免立即复制数据,但基本上也会这样做。

另一答案

input.csv转移到output.csv。熊猫也可以提供帮助。

import pandas as pd
pd.read_csv('input.csv', header=None).T.to_csv('output.csv', header=False, index=False)
另一答案
from itertools import izip
from csv import reader, writer

with open('source.csv') as f, open('destination.csv', 'w') as fw:
    writer(fw, delimiter=',').writerows(izip(*reader(f, delimiter=',')))
另一答案

如果lines是原始文本的列表,那么它应该是

for i in range(1,len(lines)):
    lines[i] = lines[i].split(',')

new_lines = []
for i in range(len(lines[0])):
    new_lines.append("%s,%s,%s" % (lines[0][i], lines[1][i], lines[2][i]))

或使用csv Python模块 - http://docs.python.org/library/csv.html

另一答案

最简单的方法是:

import numpy as np
import pandas as pd

_mat = pd.read_csv("test.csv")
_mat = _mat[_mat.columns[0:3]].values
_t_mat = np.transpose(_mat)

结果:

  • 输入矩阵为:[[1 2 3] [4 5 6]]
  • 输出是:[[1 4] [2 5] [3 6]]
另一答案

将CSV读入pandas数据帧,pandas已经构建了transpose函数,可以调用如下。

import pandas as pd

csv = pd.read_csv("test.csv", skiprows=1)
# use skiprows if you want to skip headers
df_csv = pd.DataFrame(data=csv)
transposed_csv = df_csv.T
print(transposed_csv)
另一答案

同样的答案nosklo(所有信用),但对于python3:

from csv import reader, writer 
with open('source.csv') as f, open('destination.csv', 'w') as fw: 
    writer(fw, delimiter=',').writerows(zip(*reader(f, delimiter=',')))

以上是关于如何在csv文件中转置数据集?的主要内容,如果未能解决你的问题,请参考以下文章

在 HIVE 中转置数据

我如何在 quicksight 中刷新 csv 数据集而不是替换数据集,因为这会丢失我的计算

如何按百分比将 CSV 数据集拆分为训练集和测试集,并将拆分后的数据集与 pandas 一起保存到本地文件夹中? [复制]

如何使用 SMOTE 将合成数据集保存在 CSV 文件中

如何从 .csv 文件中拆分数据集以进行训练和测试?

如何将多个 CSV 数据集以适合 Keras 中的模型?