如何将csv条目从水平操作为垂直

xam8gpfp  于 2022-12-15  发布在  其他
关注(0)|答案(3)|浏览(145)

我有一个包含以下条目的csv:

apple,orange,bannana,grape
10,5,6,4
four,seven,eight,nine
yes,yes,no,yes
3,5,7,4
two,one,six,nine
no,no,no,yes
2,4,7,8
yellow,four,eight,one
no,yes,no,no

我想制作一个新的csv文件,格式如下:

apple,10,four,yes
orange,5,seven,yes
bannana,6,seven,no
grape,4,nine,yes
apple,3,two,no
orange,5,one,no
bannana,7,six,no
grape,4,nine,yes

所以在葡萄之后,它从苹果开始,有了新的价值观。
我试过使用Pandas数据框,但无法弄清楚如何获得我需要的数据格式。

hmae6n7t

hmae6n7t1#

你可以在纯Python中尝试以下代码(data.csv输入文件名):

import csv
from itertools import islice

with open("data.csv", "r") as fin,\
     open("data_new.csv", "w") as fout:
    reader, writer = csv.reader(fin), csv.writer(fout)
    header = next(reader)
    length = len(header) - 1
    while (rows := list(islice(reader, length))):
        writer.writerows([first, *rest] for first, rest in zip(header, zip(*rows)))

或与Pandas:

import pandas as pd

df = pd.read_csv("data.csv")
df = pd.concat(gdf.T for _, gdf in df.set_index(df.index % 3).groupby(df.index // 3))
df.reset_index().to_csv("data_new.csv", index=False, header=False)

所提供示例的输出文件data_new.csv

apple,10,four,yes
orange,5,seven,yes
bannana,6,eight,no
grape,4,nine,yes
apple,3,two,no
orange,5,one,no
bannana,7,six,no
grape,4,nine,yes
apple,2,yellow,no
orange,4,four,yes
bannana,7,eight,no
grape,8,one,no
13z8s7eq

13z8s7eq2#

希望对你有用。

df = pd.read_csv('<source file name>')
df.T.to_csv('<destination file name>')
1sbrub3j

1sbrub3j3#

您可以转置您的 Dataframe 在Pandas如下。

pd.read_csv('file.csv', index_col=0, header=None).T

这个问题已经得到回答:
Can pandas read a transposed CSV?
根据你的新描述,问题完全改变了。你需要把你的 Dataframe 分割成子集,然后合并它们。

# Read dataframe without header
df = pd.read_csv('your_dataframe.csv', header=None)

# Create an empty DataFrame to store transposed data
tr = pd.DataFrame()

# Create, transpose and append subsets to new DataFrame
for i in range(1,df.shape[0],3):
...     temp = pd.DataFrame()
...     temp = temp.append(df.iloc[0])
...     temp = temp.append(df.iloc[i:i+3])
...     temp = temp.transpose()
...     temp.columns = [0,1,2,3]
...     tr = d.append(temp)

相关问题