首页 > 解决方案 > 使用 Python 将特定数据从文本文件转换为 csv

问题描述

我正在尝试将文本文件中的数据转换为 csv 到它们相应的列名。

这是文本文件的示例

Run  1    Tbb= 20 C    Volt=3.093   Tamb= 20.13 C   

 \1b2JTriTemp 1.0.5


 AD Averaged 00f2(mV), 0001, 0001, 0001, 0001, 0001, 0001, 0000,
 RAW Values  00f2(xx), FFFF, FFFF, FFFF, FFFF, FFFF, FFFF,
 AD Averaged 0132(mV), 0001, 0001, 0004, 3061, 0002, 0001, 0000,
 RAW Values  0132(xx), 0000, 0002, 0006, 0D0F, 0003, 0000,

当我运行此代码时:

import pandas as pd

with open("sample data as comma.txt", "r") as f:
    data = f.readlines()
with open("sample data as comma.txt", "w") as f:
    for line in data:
        if "RAW" not in line:
            f.write(line)

df = pd.read_csv("sample data as comma.txt", delimiter=',')
df.columns = ['', 'TH+', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', '']
df.to_csv('Sample raw data CSV.csv')

我收到一个错误“pandas.errors.ParserError:错误标记数据。C 错误:第 8 行中应有 1 个字段,看到 9”。

重要的是要注意,我希望能够保留定义它是哪个运行的行。EG "Run 1" 及其 Tbb、Volt 和 Tamb。这可以只在每个数据集之前的一行上。

另请注意,运行行应该是它自己的单独行,而不是排序到列中。

以下是它应该如何结束的示例: 这是一个应该如何结束的例子

任何帮助/建议将不胜感激,谢谢!

标签: pythonpandascsv

解决方案


只需在此处进行一些操作并添加那些“空白”值。

因此,此代码查看所需的最大列数,然后在这些行中附加那些额外的“空白”值。

import pandas as pd

with open("sample data as comma.txt", "r") as f:
    data = f.readlines()
    
data = [x.strip().split(',') for x in data if "RAW" not in x]
max_len = max([len(i) for i in data])

for row in data:
    if len(row) < max_len:
        row += [''] * (max_len - len(row))

df = pd.DataFrame(data, columns = ['', 'TH+', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', ''] )
df.to_csv('Sample raw data CSV.csv', index=False)

输出:来自您的样本数据

print(df.to_string())
                                                        TH+   Vacm   Vout Bat mon    TH-  Vbat2   Vamb  
0  Run  1    Tbb= 20 C    Volt=3.093   Tamb= 20.13 C                                                    
1                                                                                                       
2                                 \1b2JTriTemp 1.0.5                                                    
3                                                                                                       
4                                                                                                       
5                               AD Averaged 00f2(mV)   0001   0001   0001    0001   0001   0001   0000  
6                               AD Averaged 0132(mV)   0001   0001   0004    3061   0002   0001   0000  

推荐阅读