我想将数据格式化为特定格式的数据帧或文件。我已经从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)数据。文件只有两列,第一列是"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中的dataframe,我可以进一步操作它。但是有没有人能教我怎么处理熊猫呢?
我使用Anaconda (Spyder)作为python包(包括python 3.6.4)。
发布于 2018-07-01 01:15:06
使用:
#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
删除输出csv中的索引值,使用index=False
参数:
df.to_csv(file, index=False, sep='\t')
https://stackoverflow.com/questions/51116940
复制相似问题