提问人:Gallo 提问时间:11/15/2023 最后编辑:Gallo 更新时间:11/16/2023 访问量:60
在 python 中从不同列表中的文件拆分不同的数据(用空行分隔)
Split different data (separated by a blank line) from a file in different lists in python
问:
Python 新手在这里,我有一个文件,其中包含不同的物理实验,用空行分隔,如下所示:
#t x
0 0
0 1
0 2
0 1
0 2
0 3
我想知道是否有一种简单的方法可以根据列和实验(列表 T1 表示第一次实验的时间等)将我的数据拆分为多个列表,以便我可以分别绘制不同的实验。
我尝试使用 numpy.loadtxt 和 pandas.read_csv,但他们只是跳过空行并合并所有数据。我搜索了类似 c fscanf 函数的东西,该函数停在空行处,但我找不到简单的方法。
答:
0赞
mozway
11/15/2023
#1
读取数据时没有直接的拆分方法,但是可以读取整个文件并利用空行拆分数据帧:
df = pd.read_csv('your_file.csv', sep=r'\s+', skip_blank_lines=False)
m = df.isna().all(axis=1)
dfs = [g for _,g in df[~m].groupby(m.cumsum())]
print(dfs)
输出:
[ #t x # DataFrame #1
0 0.0 0.0
1 0.0 1.0
2 0.0 2.0,
#t x # DataFrame #2
4 0.0 1.0
5 0.0 2.0
6 0.0 3.0]
0赞
DDade
11/15/2023
#2
# Read file
with open('filename.txt', 'r') as f:
raw_data = f.read()
# Seperate each experiment
experiments = raw_data.split('\n\n')
# Split lines
experiments = [lines.split('\n') for lines in experiments]
# Create empty list for all.
all_data = []
for experiment in experiments:
# Create empty list for each experiment.
data = {'t':[], 'x':[]}
for line in experiment:
# if the first character of line is not a number, ignore ( for #t, x )
if (not line[0].isdigit()): continue
# split and convert data into int
t, x = map(int,line.split(' '))
# append it
data['t'].append(t)
data['x'].append(x)
# append it
all_data.append(data)
评论
loadtxt
loadtxt