Python 2.7 尝试使用python将CSV文件内容转换为所需格式

Python 2.7 尝试使用python将CSV文件内容转换为所需格式,python-2.7,pandas,Python 2.7,Pandas,我正在尝试将CSV文件内容从格式A转换为格式B。我尝试了pandas、default dict、dict writer等,但无法理解。问题是它是水平打印,而不是垂直打印。请找到下面的例子 格式A: 项目为A列B列C列D列 84P37W265B3 B1 3970 99.82368 99.82368 0.07556675 84P37W265B3 B3 3960 95.10101 84P37W265B3 B5 3705 96.89609 96.89609 0.05398111 84P37W265B3

我正在尝试将CSV文件内容从格式A转换为格式B。我尝试了pandas、default dict、dict writer等,但无法理解。问题是它是水平打印,而不是垂直打印。请找到下面的例子

格式A:

项目为A列B列C列D列

84P37W265B3 B1 3970 99.82368 99.82368 0.07556675

84P37W265B3 B3 3960 95.10101

84P37W265B3 B5 3705 96.89609 96.89609 0.05398111

84P37W265B3 B6 3763 98.45868 98.45868 0.02657454

84P3XT135A4 B1 7904 99.73431 99.73431 0.02

84P3XT135A4 B3 7817 97.5694 100 0.01

格式B:

项目84P37W265B3 84P3XT135A4

多边环境协定B1

COL A 3970 7904

COL B 99.82368 99.73431

C列99.82368 99.73431

D列0.07556675 0.02

meas B3 B3

COL A 3960 7817

COL B 95.10101 97.5694

C-100列

D列-0.01

meas B5-

COL A 3705-

COL B 96.89609-

C列96.89609-

D列0.05398111-

meas B6-

COL A 3763-

COL B 98.45868-

COL C 98.45868-

D列0.02657454-

有人能帮我吗,提前谢谢…

你可以使用python

以下是将格式A转换为格式B的工作代码

检查输出:

Item    84P37W265B3 84P37W265B3 84P37W265B3 84P37W265B3 84P3XT135A4

meas    B1  B3  B5  B6  B3 

COL A   3970    3960    3705    3763    7817

COL B   99.82368    95.10101    96.89609    98.45868    97.5694

COL C   99.82368        96.89609    98.45868    100

COL D   0.07556675      0.05398111  0.02657454  0.01
您可以使用python

以下是将格式A转换为格式B的工作代码

检查输出:

Item    84P37W265B3 84P37W265B3 84P37W265B3 84P37W265B3 84P3XT135A4

meas    B1  B3  B5  B6  B3 

COL A   3970    3960    3705    3763    7817

COL B   99.82368    95.10101    96.89609    98.45868    97.5694

COL C   99.82368        96.89609    98.45868    100

COL D   0.07556675      0.05398111  0.02657454  0.01

我要感谢@cyclops的回复。请找到我的动态类型代码。用户不知道输入csv文件中的列数

代码:


这是工作,但请让我是任何其他简单的方法来做到这一点。提前谢谢。

我要感谢@cyclops的回复。请找到我的动态类型代码。用户不知道输入csv文件中的列数

代码:


这是工作,但请让我是任何其他简单的方法来做到这一点。提前感谢。

感谢您的回复,但输出文件中所有项目的最后一行值均为“84P3XT135A4 B3 7817 97.5694 100 0.01”。请在回答中检查我的输出。感谢您的回复,但输出是对应的最后一行值,它将保留前一行值。在输出中,它没有以下值。84P37W265B3 B1 3970 99.82368 99.82368 0.07556675 84P37W265B3 3960 95.10101 84P37W265B3 B5 3705 96.89609 96.89609 0.05398111 84P37W265B3 B6 3763 98.45868 0.02657454 84P3XT135A4 B1 7904 99.73431 99.73431 0.02非常感谢您的回复,它正在工作。这是静态的,如果是动态的,如何处理。我的意思是,我们不知道输入csv文件中的列数。感谢您的回复,但输出文件对所有项目只有最后一行值“84P3XT135A4 B3 7817 97.5694 100 0.01”。请在回答中检查我的输出。感谢您的回复,但输出是对应的最后一行值,它保留了前一行值。在输出中,它没有以下值。84P37W265B3 B1 3970 99.82368 99.82368 0.07556675 84P37W265B3 3960 95.10101 84P37W265B3 B5 3705 96.89609 96.89609 0.05398111 84P37W265B3 B6 3763 98.45868 0.02657454 84P3XT135A4 B1 7904 99.73431 99.73431 0.02非常感谢您的回复,它正在工作。这是静态的,如果是动态的,如何处理。我的意思是,我们不知道输入csv文件中的列数。@cyclops:我希望,除了“item”和“meas”,我没有分配任何内容。所以我的意思是动态的,sry,如果假设错误的话。之所以这样做是因为我需要该项作为列标题。对于格式B中所示的项目,是否可以将B1置于B3之下B5之下B6之下?@cyclops:我希望,除了“项目”和“多边环境协定”,我没有分配任何内容。所以我的意思是动态的,sry,如果假设错误的话。之所以这样做是因为我需要该项作为列标题。对于格式B中所示的项目,是否可以将B1置于B3之下B5之下B6之下?
import csv
from collections import defaultdict

column_header=[]

columns = defaultdict(list) 
with open('C:\outfile4.csv') as f:
  reader = csv.DictReader(f) 
  for row in reader: 
        for (k,v) in row.items(): 
            columns[k].append(v)


b_csv = r'C:\outfile5.csv'

with open(b_csv, 'w') as csvfile:
  writer = csv.writer(csvfile, delimiter=',', quotechar='|',   quoting=csv.QUOTE_MINIMAL)

    for key,values in sorted(columns.iteritems()):
      if key == 'item':
         writer.writerow([key]+values)
    for key,values in sorted(columns.iteritems()):
      if key == 'meas':
         writer.writerow([key]+values)
    for key,values in sorted(columns.iteritems()):
      if key != 'item' and key != 'meas':
         writer.writerow([key]+values)