首页 > 解决方案 > read_table 处理缺失的字符串

问题描述

在尝试使用 pandas 从 .txt 文件导入数据时read_table(),我遇到了一个有趣的问题。

该文件包含一个仅部分填充字符串的列 ( OrigVol )。然后用以下列中的值填充空单元格,并在末尾添加 NaN,这种转变会导致空单元格。下图显示了使用pd.read_table( file.txt, sep = r'\s+')after的结果import pandas as pd

在此处输入图像描述

OrigVol列应包含空字符串或 NaN,而不是prim_pos_eutags列。我是熊猫的新手,很难想出一个完全重现问题的 MWE。需要该文件(我无法上传)。

也许我错过了指定导入选项。如果需要更多信息,请告诉我。

任何提示都非常感谢!

根据建议,我提供了一个示例文件的前 8 行

Name            Subtype     ProcName            Material    Creator     OrigVol trklen                  prim_pos_eutags
top             0           initStep            undefined   undefined   top     0                       prim_pos_eudata
top             91          Transportation      Vacuum      undefined           2.27009877562523E-12    prim_pos_eudata
QC5L_2_v        91          Transportation      Vacuum      undefined           3.50000000000227        prim_pos_eudata
DRIFT_8609_v    91          Transportation      Vacuum      undefined           3.80000000000518        prim_pos_eudata
BC1L_2_v        23          SynRad              Vacuum      undefined           68.1607816456518        prim_pos_eudata
BC1L_2_v        91          Transportation      Vacuum      undefined           79.0910350747966        prim_pos_eudata
DRIFT_8610_v    91          Transportation      Vacuum      undefined   QC2_v   79.3910346856657        prim_pos_eudata

标签: python-3.xpandas

解决方案


感谢Anant Mittal的建议,问题得以解决。

但是,我做了一些小的改动来实现一个干净的数据框,第一行作为标题。

input_file  = open('test.txt', "r")
data = []
for line in input_file:
    splitted_list = line.split()

    if len(splitted_list) == 8: data.append( splitted_list )
    if len(splitted_list) < 8: # 8 is number of columns, change it if it is wrong
        splitted_list.insert(5, "") # add an empty string inn the 5th column (change the number if it is wrong)
        data.append(splitted_list)

test = pd.DataFrame.from_records( data )

# first row to select header
header = test.iloc[0] 
# exclude first line 
test = test[1:] 
# reset the header
test.columns = header
test

推荐阅读