我有一个样本data(Data_sample_truncated.txt
),该样本已从大数据中删除。它具有3个字段-"Index", "Time" and "RxIn.Density[**x**, ::]"
在这里我使用x作为整数,因为x
可以在任何范围内变化。在此数据中为0-15
。 3列字段的组合是唯一的。对于不同的"Index"
字段,"Time" and "RxIn.Density[**x**, ::]"
可以相同或不同。对于每个新的"Index"
值,数据都有一个blank line
和几乎相似的列标题,但"RxIn.Density[**x**, ::]"
除外,当达到新的x
值时"Index"
会增加。我从ADS
(电路仿真软件)导出的数据在导出时给了我这种格式。
现在,我要格式化数据,以便所有数据在3个唯一的列字段-"Index", "Time" and "RxIn.Density"
下合并在一起。您可以看到我要在第三列的新数据框中删除字符串[**x**, ::]
。这是格式化(Data-format_I_want_after_formatting.txt
)后的sample final data file that I want。所以我想要以下内容-
要删除的空白行(或行)
要删除的所有其他标题行仅保留顶部标题并将第三列标题更改为"RxIn.Density"
即使数据值重复,也将所有数据合并在唯一列字段-"Index", "Time" and "RxIn.Density"
下。
我的MATLAB代码在下面:
import pandas as pd
#create DataFrame from csv with columns f and v
df = pd.read_csv('Data_sample_truncated.txt', sep="\s+", names=['index','time','v'])
#boolean mask for identify columns of new df
m = df['v'].str.contains('RxIn')
#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']]
df = df.drop_duplicates(subset=['index', 'time'], keep=False)
df.to_csv('target.txt', index=False, sep='\t')
生成的
target.txt
文件不是我想要的。您可以here检查它。任何人都可以帮助解决我的代码的问题以及如何解决该问题,以免我想要的格式吗?我正在使用Spyder 3.2.6(Anaconda),其中嵌入了python 3.6.4 64位。
最佳答案
您可以过滤掉不需要的行(检查this):
import pandas as pd
df = pd.read_csv('Data_sample_truncated.txt', sep="\s+")
df.columns = ["index","time","RxIn.Density","1"]
del df["1"]
df = df[~df["RxIn.Density"].str.contains("Rx")].reset_index(drop=True)
df.to_csv('target.txt', index=False, sep='\t')