将数据从 .data 文件转换为 .csv 文件,并使用 pandas 将数据放入列中

2023-12-03

我想将 .data 文件中的数据转换为 .csv 文件,并将 .data 文件中的数据放入其下带有值的列中。但是,.data 文件具有特定的格式,我不知道如何将文本放入列中。 .data 文件如下所示:

column1  
column2  
column3  
column4  
column5  
column6  
column7  
column8  
column9  
column10  
column11  
column12  
column13  
........
column36

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573  
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444  

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573  
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444  

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573  
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444  

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573  
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444

如上所示的文件有 36 列的名称,每列 1 行。下面有许多数据点,其中有 36 个值,用分号分隔。数据点有 2 行长,每个数据点由空行分隔。 .csv 文件必须如下所示:

column1,column2,column3,column4,column5,column6,column7,column8,column9,column10,column11,column12,column14,column15,column16,column17,column18,column20,column20,column21,column22,column23,column24,column25,column26,column27,column28,column29,column30,column31,column32,column33,column34,column35,column36
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444

如上所示的 .csv 文件的第一行必须包含 36 列,其中的名称以逗号分隔。接下来的行必须包含所有数据点,每个数据点占 1 行,其中 36 个值必须用逗号分隔。

您可以使用软件库“pandas”来实现此目的吗?无论如何,这是我的起始代码:

with open("file.data") as fIn, open("file.csv", "w") as fOut:
    for r, line in enumerate(fIn):
        if not line:
            break

Thanks


当然你可以用熊猫做到这一点。你只需要先阅读N行(在您的情况下为 36 行)将它们用作标题并像普通 csv 一样读取文件的其余部分(pandas 擅长于此)。然后你可以保存pandas.DataFrame对象到 csv。

由于您的数据被分成相邻的行,因此我们应该将已读取的 DataFrame 拆分为两行,并将它们逐一堆叠(水平)。

考虑以下代码:

import pandas as pd

COLUMNS_COUNT = 36
# read first `COLUMNS_COUNT` lines to serve as a header
with open('data.data', 'r') as f:
    columns = [next(f).strip() for line in range(COLUMNS_COUNT)]
# read rest of the file to temporary DataFrame
temp_df = pd.read_csv('data.data', skiprows=COLUMNS_COUNT, header=None, delimiter=';', skip_blank_lines=True)
# split temp DataFrame on even and odd rows
even_df = temp_df.iloc[::2].reset_index(drop=True)
odd_df = temp_df.iloc[1::2].reset_index(drop=True)
# stack even and odd DataFrames horizontaly
df = pd.concat([even_df, odd_df], axis=1)
# assign column names
df.columns = columns
# save result DataFrame to csv
df.to_csv('out.csv', index=False)

UPD:更新代码以正确处理分成两行的数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据从 .data 文件转换为 .csv 文件,并使用 pandas 将数据放入列中 的相关文章

随机推荐