我有下面的. txt文件,我想读到一个Pandas Rame中:

#Date                     run               angle                NAME        
#-----                  _______            ________             _______    
2023-02-15 10:00:00      120716            -1.75493           4.5x10-4 Al 40um
2023-02-15 10:38:48      120716            -1.75493           JD70-103 50um 0/90 deg
2023-02-15 18:25:41      120723            -0.658             JD70-103 50um 45/135 deg

我正在try 使用匹配任意数量的空格的正则表达式分隔符读取. txt文件,除非前面有日期("\d\d:\d\d\d")、"Al"、"\d\dum"、"deg"或类似于"[0—999]/[0—999]"的内容:

df = pd.read_csv("file.txt", engine='python', sep='\s+(?!\d\d:\d\d:\d\d|Al|\d\dum|deg|((\d|\d\d|\d\d\d)\/(\d|\d\d|\d\d\d)))')

出于某种原因,这创建了一个将三列NaN值插入到我想要的每一列之间:

                  Date  NaN  None.1  None.2      run   None.3     None.4     None.5        angle ...
0  2023-02-15 10:00:00  NaN     NaN     NaN   120716      NaN        NaN        NaN     -1.75493 ...
1  2023-02-15 10:38:48  NaN     NaN     NaN   120716      NaN        NaN        NaN     -1.75493 ...
2  2023-02-15 18:25:41  NaN     NaN     NaN   120723      NaN        NaN        NaN     -0.658 ...

你知道为什么会这样吗?我最好的猜测是分隔符正在分隔一行中的多个空格,但这不是我期望从上面提到的regex中得到的行为.

推荐答案

因此,我建议你将你的文本文件修复成一个实际的CSV,否则,阅读它将缓慢与pandas,因为你将无法使用箭头或C引擎.理想情况下,你只需要阅读一份镶木地板文件.那会很快.

您提供的正则表达式不起作用的原因是因为您使用的是捕获组,所以您应该使用非捕获组.所以:

df = pd.read_csv(f, engine='python', sep=r'\s+(?!\d\d:\d\d:\d\d|Al|\d\dum|deg|(?:(?:\d|\d\d|\d\d\d)\/(?:\d|\d\d|\d\d\d)))')

在你提供的示例片段上为我工作.

但我真的不知道怎么强调你应该修复这个文本文件.使用正则表达式分隔符是一种技巧.请注意,在不清理文本文件的情况下,它会进行解析,但所有内容都会被解析为dtype=object,这是您绝对不想要的.为了提高性能,您应该创建一个拼图文件,并使用pandas.read_parquet读取它(因为您关心的是性能,所以确保您已经安装了pyarrow并使用了dtype_backend='pyarrow')

Python相关问答推荐

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

Pandas 都是(),但有一个门槛

将tdqm与cx.Oracle查询集成

有没有一种方法可以从python的pussompy比较结果中提取文本?

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

Scrapy和Great Expectations(great_expectations)—不合作

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

为什么if2/if3会提供两种不同的输出?

在极中解析带有数字和SI前缀的字符串

处理具有多个独立头的CSV文件

干燥化与列姆化的比较

为什么我的sundaram筛这么低效

判断Python操作:如何从字面上得到所有decorator ?

如何在验证文本列表时使正则表达式无序?

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

无法在盐流道中获得柱子

无法使用请求模块从网页上抓取一些产品的名称

如何在表单中添加管理员风格的输入(PDF)

基于2级列表的Pandas 切片3级多索引