2017-06-06 53 views
1

我想用python熊猫读一个空格分隔的文件。此文件的第一列包含一些空格,因此我无法成功读取此文件。如何读取也使用熊猫的列中包含空格的空格分隔文件?

输入文件数据 -

 Jan1 Jan2 Jan3 Jan4 Jan5 total 
A BC 1 2 4 4 5 16 
PQ R 1 2 3 4 5 15 
X Y Z 2 2 2 2 2 10 

我试着用下面的代码来读它 -

df = pd.read_csv("text2.txt", sep = r"\s+",engine='python') 
df.to_csv("out.csv",index=None) 

我还试图用 -

delim_whitespace =真

我想从这个文件看起来像下面生成CSV文件 -

names,Jan1,Jan2,Jan3,Jan4,Jan5,total 
A BC,1,2,4,4,5,16 
PQ R,1,2,3,4,5,15 
X Y Z,2,2,2,2,2,10 

是我错过了一些p-

+1

怎么样只是DF = pd.read_csv(“text2.txt”)? –

+0

第一列是否有特定的固定宽度?从你的例子看来,它可能不是。谁会知道如何解析这个?第一列是第一位数字的规则吗?或者是其他东西? –

+0

正如@Noobie指出的,这看起来像一个普通的csv。逗号似乎正确地分隔了名称列和数字值。你说你正在寻找的结果是通过'read_csv()'来实现的 –

回答

1

您必须半手动解析它

def read_funny_csv(filehandle): 
    columns = None 
    index = list() 
    data = list() 

    split_pattern = re.compile('\s+') 

    num_columns = None 
    for line in filehandle: 
     parts = split_pattern.split(line.strip()) 
     if num_columns is None: 
      num_columns = len(parts) 
      columns = parts 
      continue 
     index.append(' '.join(parts[:-num_columns])) 
     data.append(parts[-num_columns:]) 
    return columns, index, data 

打电话给我

with open("text2.txt", 'r') as filehandle: 
    columns, index, data = read_funny_csv(filehandle) 

df = pd.DataFrame(index=index, data=data, columns=columns) 

您必须自己指定dtypes

如果你想使大熊猫在它本身就是一个刺,你可以这样导出到一个体面分隔CSV,然后重新装入

相关问题