2017-06-06 57 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,然後重新裝入

相關問題