Python 3.x read_表处理缺少的字符串

Python 3.x read_表处理缺少的字符串,python-3.x,pandas,Python 3.x,Pandas,在尝试使用pandasread_table()从.txt文件导入数据时,我遇到了一个有趣的问题 该文件只包含部分填充字符串的列(OrigVol)。然后用下一列中的值填充空单元格,并在末尾添加NAN,该移位将导致空单元格。下图显示了使用pd.read_表(file.txt,sep=r'\s+')将熊猫作为pd导入后的结果 列OrigVol应包含空字符串或NaN,而不是列prim\u pos\u eutags。 我是熊猫的新手,很难想出一个能准确再现这个问题的MWE。你需要这个文件(我无法上传)

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

该文件只包含部分填充字符串的列(OrigVol)。然后用下一列中的值填充空单元格,并在末尾添加NAN,该移位将导致空单元格。下图显示了使用
pd.read_表(file.txt,sep=r'\s+')
将熊猫作为pd导入后的结果

OrigVol应包含空字符串或NaN,而不是列prim\u pos\u 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

列之间用不同数量的空格分隔,以使列在文本文件中看起来美观并对齐。您可以做的是逐行读取文件,拆分该行,然后查看使用
line.split()
生成的列表中的元素数是否小于列数。如果是,则在所需索引处添加空字符串

input_file  = open('test.txt', "rb")
data = []
for line in input_file:
    splitted_list = line.split()
    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)
df = pd.DataFrame.from_records(data)
input_file=open('test.txt',“rb”)
数据=[]
对于输入_文件中的行:
splitted_list=line.split()
如果len(splitted_list)<8:#8是列数,如果错误,请更改它
拆分列表。插入(5,“”)#在第5列中添加一个空字符串(如果数字错误,请更改数字)
data.append(拆分的_列表)
df=pd.DataFrame.from_记录(数据)

多亏了的建议,问题才得以解决

然而,我做了一些小的修改,以获得一个干净的数据帧,第一行作为标题

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
input_file=open('test.txt',“r”)
数据=[]
对于输入_文件中的行:
splitted_list=line.split()
如果len(分割的_列表)==8:data.append(分割的_列表)
如果len(splitted_list)<8:#8是列数,如果错误,请更改它
拆分列表。插入(5,“”)#在第5列中添加一个空字符串(如果数字错误,请更改数字)
data.append(拆分的_列表)
测试=来自_记录(数据)的pd.DataFrame
#选择标题的第一行
header=test.iloc[0]
#排除第一行
测试=测试[1:]
#重置标题
test.columns=标题
测验

Hi-谢谢您提供的信息。我已经怀疑它可能与指定的分隔符有关。然而,我担心,退回到一个空白处恐怕不会起作用。通常,在整个文件中,多个空格用作分隔符。谢谢通知。您是否检查了
”\s
?如果是,您能否共享至少一行数据?是否可以更改一些值,然后共享?胡乱猜测是非常困难的。使用
'
以及
\s
进行简单检查似乎不起作用。我提供了一个示例文件作为对我的原始帖子的编辑。胡乱猜测确实没有多大帮助;)谢谢。是的,刚刚检查过,很遗憾这是一个数据采集的坏例子。列之间用不同数量的空格分隔,以使列在文本文件中看起来美观并对齐。仍在考虑如何处理此案。它是唯一缺少值的列吗?如果是这样的话,可以考虑一些黑客攻击。事实上,这并不是数据文件的最佳示例。幸运的是,它是唯一一个部分没有数据的列。