首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中将行转置为列

在python中将行转置为列
EN

Stack Overflow用户
提问于 2014-12-07 01:44:07
回答 2查看 4K关注 0票数 1

我是python的新手,我想转置一个CSV格式的文件。我的文件结构是这样的:

代码语言:javascript
复制
Country;Class;Number
UK;1;50
Germany;2;30
France;3;50
France;1;20

我需要将类变量转置为列,即

代码语言:javascript
复制
          class1 class2

country      Number Number

在Shell或Python中可以做到这一点吗?

我知道在Python语言中使用zip()可以完全转置矩阵,但我只想转置class-column。在Python或shellscript脚本中可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2014-12-07 03:25:42

您想要旋转数据,而不是转置数据:

代码语言:javascript
复制
import pandas
from io import StringIO # python 3
# from StringIO import StringIO # python 2

datafile = StringIO("""\
Country;Class;Number
UK;1;50
Germany;2;30
France;3;50
France;1;20
""")
df = pandas.read_csv(datafile, sep=';')
print(df.pivot(index='Country', columns='Class', values='Number'))

Class     1   2   3
Country            
France   20 NaN  50
Germany NaN  30 NaN
UK       50 NaN NaN
票数 1
EN

Stack Overflow用户

发布于 2014-12-07 02:50:20

代码语言:javascript
复制
import csv

with open('test.csv', 'r') as f:
    reader = csv.DictReader(f, delimiter=';')
    # make a dict of empty lists, to contain our values
    transposed = {k:[] for k in reader.fieldnames}  # could use defaultdict here
    for row in reader:
        for k, v in row.items():
            transposed[k].append(v)
print(transposed)

这将为您提供一个如下所示的字典:

代码语言:javascript
复制
{
    'Country': ['UK', 'Germany', 'France', 'France'],
    'Class': ['1', '2', '3', '1'],
    'Number': ['50', '30', '50', '20']
}

好处:您也可以使用collections.defaultdict来设置transposed,而不是使用字典理解

代码语言:javascript
复制
from collections import defaultdict
transposed = defaultdict(list)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27334539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档