【发布时间】:2021-12-28 18:26:04
【问题描述】:
我正在尝试读取大量文本文件并清理到数据框中。这些文件不包含分隔符,由于包含与后续行集对应的数据的某些行,因此具有不规则的宽度。
这里有 2 个示例:
ITEM NBR ITEM DESCRIPTION UNIT OF UNIT BIDDER CALCULATED BIDR CALC
BIDR NBR BIDDER NAME QUANTITY MEASURE PRICE EXTENSION EXTENSION EXTENSION DIFF
X0326806 WASHOUT BASIN 1.000 L SUM
1216 Copenhaver Construction, Inc. 1,000.0000 1,000.00 1,000.00
1320 D. Construction, Inc. 1,500.0000 1,500.00 1,500.00
3069 K-Five Construction Corporation 1,000.0000 1,000.00 1,000.00
3702 Martam Construction Incorporated 1,500.0000 1,500.00 1,500.00
4741 Phoenix Corporation of the Quad Cities 5,000.0000 5,000.00 5,000.00
4786 Pir Tano Construction Company, Inc. 1,200.0000 1,200.00 1,200.00
1560 R. W. Dunteman Company 450.0000 450.00 450.00
5378 Schroeder Asphalt Services, Inc. 5,100.0000 5,100.00 5,100.00
X0327036 BIKE PATH REM 120.000 SQ YD
1216 Copenhaver Construction, Inc. 16.0000 1,920.00 1,920.00
1320 D. Construction, Inc. 20.0000 2,400.00 2,400.00
3069 K-Five Construction Corporation 5.0000 600.00 600.00
3702 Martam Construction Incorporated 10.0000 1,200.00 1,200.00
4741 Phoenix Corporation of the Quad Cities 14.0000 1,680.00 1,680.00
4786 Pir Tano Construction Company, Inc. 32.0000 3,840.00 3,840.00
1560 R. W. Dunteman Company 12.8400 1,540.80 1,540.80
5378 Schroeder Asphalt Services, Inc. 18.0000 2,160.00 2,160.00
这里还有另一个文件:
ITEM NBR ITEM DESCRIPTION UNIT OF UNIT BIDDER CALCULATED BIDR CALC
BIDR NBR BIDDER NAME QUANTITY MEASURE PRICE EXTENSION EXTENSION EXTENSION DIFF
X0320050 CONSTRUCTN LAYOUT SPL 1.000 L SUM
2341 Builders Paving, LLC 5,000.0000 5,000.00 5,000.00
3020 J. A. Johnson Paving Company 5,000.0000 5,000.00 5,000.00
0280 Peter Baker & Son Co. 1,500.0000 1,500.00 1,500.00
X0327611 REM & REIN BRIC PAVER 55.000 SQ FT
2341 Builders Paving, LLC 20.0000 1,100.00 1,100.00
3020 J. A. Johnson Paving Company 40.0000 2,200.00 2,200.00
0280 Peter Baker & Son Co. 20.0000 1,100.00 1,100.00
我对使用 R 或 Python 持开放态度,并尝试了各种使用 base R、readr 和 data.table 以及 pandas 和使用 open() 循环遍历行的方法,但收效甚微。我的分隔符使用错误,因为我的结果要么将每个空格解析为一列,要么给我一个包含每行所有内容的列。
有没有一种干净的方法来完成这个?谢谢。
【问题讨论】:
-
“已经尝试了多种方法” - 请包括您尝试过的一些代码以及预期的输出。
-
看起来很简单;用两个空格替换多个空格,然后在两个空格上拆分,我认为应该可以。
-
你试过用pandas读取文本文件然后设置
delim_whitespace=True吗?例如:df = pd.read_csv(file_path, delim_whitespace=True) -
@BlakeLucey - 刚刚尝试过,但它会导致客户名称的每个部分被解析到不同的列中,根据名称中的单词数将数值推送到不同的列中。