我想将数据格式化为具有特定格式的数据框或文件。我已经从ADS是德科技提取了数据。但是数据结构对于进一步处理没有用。数据文件具有R(1,1)至R(2,2),L(1,1)至L(2,2),G(1,1)至G(2,2),C(1, 1)到不同频率的C(2,2)数据。该文件只有2列,第一列是“ Freq”,第二列是RLGC数据之一。我在这里给出了一个示例,其中每个数据只有3个频率。还有目标格式。
真实文件包含3000个频率的数据。
数据文件为(两列以制表符分隔):
freq R(1,1)
0.00E+00 5.11E+00
1.00E+06 5.59E+00
2.00E+06 5.69E+00
freq R(1,2)
0.00E+00 7.13E-13
1.00E+06 9.82E-03
2.00E+06 2.47E-02
freq R(2,1)
0.00E+00 7.13E-13
1.00E+06 9.82E-03
2.00E+06 2.47E-02
freq R(2,2)
0.00E+00 5.11E+00
1.00E+06 5.59E+00
2.00E+06 5.69E+00
freq L(1,1)
0.00E+00 6.61E-07
1.00E+06 6.97E-07
2.00E+06 7.06E-07
freq L(1,2)
0.00E+00 4.46E-07
1.00E+06 4.47E-07
2.00E+06 4.48E-07
freq L(2,1)
0.00E+00 4.46E-07
1.00E+06 4.47E-07
2.00E+06 4.48E-07
freq L(2,2)
0.00E+00 6.61E-07
1.00E+06 6.97E-07
2.00E+06 7.06E-07
freq G(1,1)
0.00E+00 1.04E-17
1.00E+06 6.42E-07
2.00E+06 1.29E-06
freq G(1,2)
0.00E+00 -5.02E-18
1.00E+06 -3.11E-07
2.00E+06 -6.23E-07
freq G(2,1)
0.00E+00 -5.02E-18
1.00E+06 -3.11E-07
2.00E+06 -6.23E-07
freq G(2,2)
0.00E+00 1.04E-17
1.00E+06 6.42E-07
2.00E+06 1.29E-06
freq C(1,1)
0.00E+00 5.58E-11
1.00E+06 5.54E-11
2.00E+06 5.53E-11
freq C(1,2)
0.00E+00 -3.27E-11
1.00E+06 -3.25E-11
2.00E+06 -3.25E-11
freq C(2,1)
0.00E+00 -3.27E-11
1.00E+06 -3.25E-11
2.00E+06 -3.25E-11
freq C(2,2)
0.00E+00 5.58E-11
1.00E+06 5.54E-11
2.00E+06 5.53E-11
目标文件应如下所示(各列也用制表符分隔):
freq R(1,1) R(1,2) R(2,1) R(2,2) L(1,1) L(1,2) L(2,1) L(2,2) G(1,1) G(1,2) G(2,1) G(2,2) C(1,1) C(1,2) C(2,1) C(2,2)
0.00E+00 5.11E+00 7.13E-13 7.13E-13 5.11E+00 6.61E-07 4.46E-07 4.46E-07 6.61E-07 1.04E-17 -5.02E-18 -5.02E-18 1.04E-17 5.58E-11 -3.27E-11 -3.27E-11 5.58E-11
1.00E+06 5.59E+00 9.82E-03 9.82E-03 5.59E+00 6.97E-07 4.47E-07 4.47E-07 6.97E-07 6.42E-07 -3.11E-07 -3.11E-07 6.42E-07 5.54E-11 -3.25E-11 -3.25E-11 5.54E-11
2.00E+06 5.69E+00 2.47E-02 2.47E-02 5.69E+00 7.06E-07 4.48E-07 4.48E-07 7.06E-07 1.29E-06 -6.23E-07 -6.23E-07 1.29E-06 5.53E-11 -3.25E-11 -3.25E-11 5.53E-11
目标格式可以是python中的数据框,我可以对其进行进一步操作。但是有人可以帮我做熊猫吗?
我正在将Anaconda(Spyder)用于python软件包(包括python 3.6.4)。
答案 0 :(得分:0)
使用:
#create DataFrame from csv with columns f and v
df = pd.read_csv(filename, sep="\s+", names=['freq','v'])
#boolean mask for identify columns of new df
m = df['v'].str.endswith(')')
#new column by replace NaNs by forward filling
df['g'] = df['v'].where(m).ffill()
#get original ordering for new columns
cols = df['g'].unique()
#remove rows with same values in v and g columns
df = df[df['v'] != df['g']]
#reshape by pivoting with change ordering of columns by reindex
df = df.pivot('freq', 'g', 'v').rename_axis(None, axis=1).reindex(columns=cols).reset_index()
print (df)
freq R(1,1) R(1,2) R(2,1) R(2,2) L(1,1) L(1,2) \
0 0.00E+00 5.11E+00 7.13E-13 7.13E-13 5.11E+00 6.61E-07 4.46E-07
1 1.00E+06 5.59E+00 9.82E-03 9.82E-03 5.59E+00 6.97E-07 4.47E-07
2 2.00E+06 5.69E+00 2.47E-02 2.47E-02 5.69E+00 7.06E-07 4.48E-07
L(2,1) L(2,2) G(1,1) G(1,2) G(2,1) G(2,2) C(1,1) \
0 4.46E-07 6.61E-07 1.04E-17 -5.02E-18 -5.02E-18 1.04E-17 5.58E-11
1 4.47E-07 6.97E-07 6.42E-07 -3.11E-07 -3.11E-07 6.42E-07 5.54E-11
2 4.48E-07 7.06E-07 1.29E-06 -6.23E-07 -6.23E-07 1.29E-06 5.53E-11
C(1,2) C(2,1) C(2,2)
0 -3.27E-11 -3.27E-11 5.58E-11
1 -3.25E-11 -3.25E-11 5.54E-11
2 -3.25E-11 -3.25E-11 5.53E-11
最后to_csv
使用index=False
参数删除输出csv中的索引值:
df.to_csv(file, index=False, sep='\t')