如何构建以下表?

时间:2016-08-30 19:11:20

标签: python pandas

您好我已经处理了一个excel文件并获取了一些参数来创建许多表,表的结构如下:

"AWK|USL|R|SVKDIKG_tVstiKg|S|[PARAMETER1]~BURAGO~[PARAMETER2]~WVDG~333" "AFUSLR~USLSSHS~Farm~~%ERD_ARGV=MR4567.%VRSD%.%23WF%.333.%RVB%.tRt"
"AWK|USL|R|Bimbo|S|[PARAMETER3]~K~999" "USLo99941VRR.VxV"
"AWK|USL|R|Bimbo|S|[PARAMETER3]~Q~999" "USLo99941VRR.VxV"
"AWK|USL|R|Ford|S|[PARAMETER3]~K~999" "[PARAMETER3]~K"
"AWK|USL|R|Ford|S|[PARAMETER3]~Q~999" "[PARAMETER3]~K"

我需要用来创建表的参数包含在excel文件中,它们看起来如下:

123123,RIBICOM,FACTIBLE
050944,TELCOM,423423
.
.
.
42342,CORPS,233243

这个想法是把“,”作为一个列分隔符,其中第一列是“PARAMETER1”,第二列是“PARAMETER2”,最后是“PARAMETER3”,第三列是raw,对于每个原始或者这个archive我需要生成一个填充模板占位符的表,如下所示:

"AWK|USL|R|SVKDIKG_tVstiKg|S|123123~BURAGO~RIBICOM~WVDG~333" "AFUSLR~USLSSHS~Farm~~%ERD_ARGV=MR4567.%VRSD%.%23WF%.333.%RVB%.tRt"
"AWK|USL|R|Bimbo|S|FACTIBLE~K~999" "USLo99941VRR.VxV"
"AWK|USL|R|Bimbo|S|FACTIBLE~Q~999" "USLo99941VRR.VxV"
"AWK|USL|R|Ford|S|FACTIBLE~K~999" "FACTIBLE~K"
"AWK|USL|R|Ford|S|FACTIBLE~Q~999" "FACTIBLE~K"

更清楚模板的占位符如下:

[PARAMETER1]
[PARAMETER2]
[PARAMETER3]

这些是我需要填写的内容,

上面的示例将是第一行的所需输出,我需要生成一个包含所有表连接的txt文件,为了实现这一点我试过:

import pandas as pd
# -*- coding: utf-8 -*-
xl = pd.ExcelFile("Book1.xlsx")
#to clean from duplicates
df = xl.parse("Sheet1")
df=df.drop_duplicates()
#these are the values that I am concatenating below
Parameter1=df[u'Header1 ']
Parameter2=df[u'Header2 ']
Parameter3=df[u'Header3 ']

#This is the dataframe with the corresponding columns
important_Parameters=df[u'Header1 '].astype(str)+","+df[u'Header2 '].astype(str)+","+df[u'Header3 '].astype(str)

#to write my dataframe on disk.
important_Parameters.to_csv("important33.txt", index=False)

我不确定什么是最好的方法继续进行,因为我曾经使用“sed”和“awk”在bash中做那种事情但是这次我想尝试使用pandas和python我真的很感激任何继续执行此特定任务的建议。

1 个答案:

答案 0 :(得分:2)

你试试这个

import pandas as pd
# -*- coding: utf-8 -*-
df = pd.read_csv("param.csv")
print df
df=df.drop_duplicates()
filename='sample.txt'

print "\n\nReplace with new values"
for index, row in df.iterrows():
    print "New Values \n\n"
    print row 
    f=open(filename)
    filedata = f.read()
    filedata=filedata.replace("[PARAMETER1]",row[0])
    filedata=filedata.replace('[PARAMETER2]',row[1])
    filedata=filedata.replace('[PARAMETER3]',row[2])
    print filedata

输出

      Parameter1 Parameter2 Parameter3
    0    123123A    RIBICOM   FACTIBLE
    1   050944BS     TELCOM     423423


    Replace with new values
    New Values


    Parameter1     123123A
    Parameter2     RIBICOM
    Parameter3    FACTIBLE
    Name: 0, dtype: object
    AWK|USL|R|SVKDIKG_tVstiKg|S|123123A~BURAGO~RIBICOM~WVDG~333 AFUSLR~USLSSHS~Farm~
    ~%ERD_ARGV=MR4567.%VRSD%.%23WF%.333.%RVB%.tRt
    AWK|USL|R|Bimbo|S|FACTIBLE~K~999 USLo99941VRR.VxV
    AWK|USL|R|Bimbo|S|FACTIBLE~Q~999 USLo99941VRR.VxV
    AWK|USL|R|Ford|S|FACTIBLE~K~999 FACTIBLE~K
    AWK|USL|R|Ford|S|FACTIBLE~Q~999 FACTIBLE~K
    New Values


    Parameter1    050944BS
    Parameter2      TELCOM
    Parameter3      423423
    Name: 1, dtype: object
    AWK|USL|R|SVKDIKG_tVstiKg|S|050944BS~BURAGO~TELCOM~WVDG~333 AFUSLR~USLSSHS~Farm~
    ~%ERD_ARGV=MR4567.%VRSD%.%23WF%.333.%RVB%.tRt
    AWK|USL|R|Bimbo|S|423423~K~999 USLo99941VRR.VxV
    AWK|USL|R|Bimbo|S|423423~Q~999 USLo99941VRR.VxV
    AWK|USL|R|Ford|S|423423~K~999 423423~K
    AWK|USL|R|Ford|S|423423~Q~999 423423~K

Sample.txt的

"AWK|USL|R|SVKDIKG_tVstiKg|S|[PARAMETER1]~BURAGO~[PARAMETER2]~WVDG~333" "AFUSLR~USLSSHS~Farm~~%ERD_ARGV=MR4567.%VRSD%.%23WF%.333.%RVB%.tRt"
"AWK|USL|R|Bimbo|S|[PARAMETER3]~K~999" "USLo99941VRR.VxV"
"AWK|USL|R|Bimbo|S|[PARAMETER3]~Q~999" "USLo99941VRR.VxV"
"AWK|USL|R|Ford|S|[PARAMETER3]~K~999" "[PARAMETER3]~K"
"AWK|USL|R|Ford|S|[PARAMETER3]~Q~999" "[PARAMETER3]~K"