将多空格分隔的文件转换为 CSV 使用 python 2.7 和 Pandas?

converting a multiple space delimited file to CSV using python 2.7 with Pandas?

提问人:user1526470 提问时间:5/12/2021 最后编辑:Matiissuser1526470 更新时间:5/13/2021 访问量:294

问:

我有多个问题,我试图用这个文件解决,但我的当务之急是尝试将这个文件转换为一个标准的CSV文件,该文件的字段由字段之间的空格分隔,没有1000行天才级代码。我知道一种方法可以做到这一点,就像我几年前在以前的一个项目中所做的那样,通过设置类似于 VB 中的旧 left$、mid$ 和 right$ 函数的函数来从我感兴趣的行中选择特定的字符,因为数据定义得很好,解析得很整齐, 也就是说,每列的大小都相同,因此我可以使用这些函数来选择列的字段名称来获取标题行,然后使用相同的函数逐行提取带有 mid$() 的字符串形式的数字数据,通过添加“,“ 在每个写入的字符串之间,将字符串转换回浮点数,然后我得到了带有标头的 CSV 文件。但哇,就是这么笨重和丑陋——我想用熊猫让它更优雅、更简洁、更锐利。

这是数据文件前几行的片段 - 我有数百行要处理。实际文件还有几十列,这只是一个示例,演示字段之间的变量空格作为分隔符。

日期。。。。。。。。。。。。。。。。。。。。。。时间。。。。。。。。。。。。。。。。。。。。。CH4.......................H2O
2021-04-01................01:47:45.407..............2.0063472018E+00..........1.2005321188E+00...
2021-04-01................01:47:46.336..............2.0063472018E+00..........1.2005321188E+00...
2021-04-01................01:47:47.244..............2.0063472018E+00..........1.2025918742E+00...
2021-04-01................01:47:49.049..............2.0059096902E+00..........1.2025918742E+00...

我还需要 tp 将 DATE 和 TIME 列解析为时间戳对象,我一直在尝试从 panda read_csv(parse_dates[[0,1]]) 中做到这一点,这几乎可以工作。我需要绘制每个系列的 x 轴标签的日期......但这是另一个帖子的另一个问题哈哈。

提前感谢您的任何帮助!!

约翰·雷恩2o

python pandas python-2.7 csv io

评论

0赞 Matiiss 5/12/2021
首先,您为什么要使用 Python 2.7?它本身有一些问题,已被弃用
0赞 user1526470 5/12/2021
我在 3 年前编写了原始代码,这就是我们仪器上的内容
0赞 user1526470 5/12/2021
实际上,这仍然是他们与仪器一起运输的东西
0赞 user1526470 5/12/2021
它不会让我尝试它说我需要 1500 分或其他东西来添加该标签
0赞 user1526470 5/12/2021
我的意思是理论上我可以自己在仪器上安装 Python 3 并使用它

答:

0赞 Martin Evans 5/12/2021 #1

使用 Pandas,将分隔符指定为空格(假设您的示例已将空格替换为点)。接下来指定 。日期和时间列可以转换为单一类型:skipinitialspace=Truedatetime64

import pandas as pd

df = pd.read_csv('input.txt', delimiter=' ', skipinitialspace=True, parse_dates=[['DATE', 'TIME']])

print(df)
print(df.dtypes)

这将为您提供:

                DATE_TIME       CH4       H2O
0 2021-04-01 01:47:45.407  2.006347  1.200532
1 2021-04-01 01:47:46.336  2.006347  1.200532
2 2021-04-01 01:47:47.244  2.006347  1.202592
3 2021-04-01 01:47:49.049  2.005910  1.202592

DATE_TIME    datetime64[ns]
CH4                 float64
H2O                 float64