簡體   English   中英

在Pandas DataFrame中讀取具有可變列的文本文件

[英]Reading text file with variable columns in pandas dataframe

我有一個這樣的文本文件:

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行,但行得通,但我不想采用這種方法。

我不想跳過任何行。

可以全部用於基於一個編號創建一個數據框或多個數據框。 列數?

有人可以幫我嗎?

任何幫助,將不勝感激。

這是解決方案的開始:

df = pd.read_csv("file.csv", sep="\t", header=None, engine='python', names=['col' + str(x) for x in range(30) ])

您必須使用帶有所需編號或大於最小值的選項names ,否則會出現錯誤。 我已經選擇了30列從cols0到cols29 ..但為避免錯誤,您可以選擇100或更多

在第一個命令的末尾添加或添加函數后,可以刪除所有充滿NaN的列:

df = df.dropna(axis=1, how='all')

這是我看到的讀取pandas dataframe中具有可變列的文本文件的唯一解決方案

之后,您可以處理數據框並搜索所需的行

結果:

         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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM