我有一个像这样的文本文件:
MAX_POWER SPEED ETDWPNO ETAWPNO OPTIMIZED BUDGET
100 20.0 000 000 MaxSpeed 00000000.00
ETD_YEAR ETD_MONTH ETD_DAY ETD_HOUR ETD_MINUTE ETA_YEAR ETA_MONTH ETA_DAY ETA_HOUR ETA_MINUTE
2013 03 03 08 00 2013 03 03 08 00
NAME LAT LON LEG_TYPE TURN_RADIUS CHN_LIMIT PLANNED_SPEED SPEED_MIN SPEED_MAX COURSE LENGTH DO_PLAN HFO_PLAN HFO_LEFT DO_LEFT ETA_DAY ETA_TIME
BERTH 34 28.343 N 133 27.147 E RHUMBLINE 00.8 00185 000.0 000.0 000.0 000.0 00000.00 00000.0 00000.0 00000 00000 0000.00.00 00:00
CHANNEL 34 28.005 N 133 26.887 E RHUMBLINE 00.3 00110 006.0 000.0 012.5 212.5 00000.32 00000.0 00000.0 00000 00000 0000.00.00 00:00
FAIRWAY 34 22.671 N 133 26.773 E RHUMBLINE 00.3 00100 008.0 000.0 012.5 181.0 00005.35 00000.0 00000.0 00000 00000 0000.00.00 00:00
HAKAMA S 34 21.016 N 133 27.444 E RHUMBLINE 00.3 00231 011.3 000.0 012.5 161.4 00001.74 00000.0 00000.0 00000 00000 0000.00.00 00:00
MU SHIMA 34 17.485 N 133 30.836 E RHUMBLINE 00.3 00231 011.3 000.0 012.5 141.4 00004.41 00000.0 00000.0 00000 00000 0000.00.00 00:00
BISAN SE 34 17.571 N 133 37.128 E RHUMBLINE 00.3 00233 011.3 000.0 012.5 089.1 00005.34 00000.0 00000.0 00000 00000 0000.00.00 00:00
BISAN SE 34 17.557 N 133 40.198 E RHUMBLINE 00.3 00231 011.3 000.0 012.5 090.3 00002.45 00000.0 00000.0 00000 00000 0000.00.00 00:00
BISAN SE 34 18.594 N 133 42.000 E RHUMBLINE 00.3 00231 011.3 000.0 012.5 055.3 00001.89 00000.0 00000.0 00000 00000 0000.00.00 00:00
BISAN SE 34 20.873 N 133 47.007 E RHUMBLINE 00.3 00231 011.3 000.0 012.5 061.2 00004.74 00000.0 00000.0 00000 00000 0000.00.00 00:00
在读取此文件时:
data = read_csv("D:/waypoints/route/"+file[0],sep="\t", header=None, engine='python')
我收到此错误:
ParserError: Expected 12 fields in line 5, saw 20
我尝试跳过前4行,但行得通,但我不想采用这种方法。
我不想跳过任何行。
所有这些都可以用于基于一个编号创建一个或多个数据框。列数?
有人可以帮我吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
这是解决方案的开始:
df = pd.read_csv("file.csv", sep="\t", header=None, engine='python', names=['col' + str(x) for x in range(30) ])
您必须使用选项names
加上所需的数字或大于最小值,否则会出现错误。我从cols0到cols29选择了30列。但是为了避免错误,您可以选择100或更多
在第一个命令末尾添加或添加函数后,可以删除所有充满NaN的列:
df = df.dropna(axis=1, how='all')
这是我看到的读取pandas数据框中具有可变列的文本文件的唯一解决方案
之后,您可以处理数据框并搜索所需的行
结果:
col0 col1 col2 col3 ... col17 col18 col19 col20
0 MAX_POWER SPEED ETDWPNO ETAWPNO ... NaN NaN None None
1 100 20.0 000 000 ... NaN NaN None None
2 ETD_YEAR ETD_MONTH ETD_DAY ETD_HOUR ... NaN NaN None None
3 2013 03 03 08 ... NaN NaN None None
4 NAME LAT LON LEG_TYPE ... NaN NaN None None
5 BERTH 34 28.343 N ... 0.0 0.0 0000.00.00 00:00
6 CHANNEL 34 28.005 N ... 0.0 0.0 0000.00.00 00:00
7 FAIRWAY 34 22.671 N ... 0.0 0.0 0000.00.00 00:00
8 HAKAMA S 34 21.016 N ... 0.0 0.0 0000.00.00 00:00
9 MU SHIMA 34 17.485 N ... 0.0 0.0 0000.00.00 00:00
10 BISAN SE 34 17.571 N ... 0.0 0.0 0000.00.00 00:00
11 BISAN SE 34 17.557 N ... 0.0 0.0 0000.00.00 00:00
12 BISAN SE 34 18.594 N ... 0.0 0.0 0000.00.00 00:00
13 BISAN SE 34 20.873 N ... 0.0 0.0 0000.00.00 00:00