2017-05-22 215 views
1

enter image description here熊貓讀「分隔」文件

嗨,我有這樣的.txt文件,與第一列代表索引,這之後是三列的對「()」表示的x,y和z內座標。

我想將這個文件的前四列加載到熊貓數據框。然而,我發現它是相當困難作爲分隔符爲先「」後「(」和括號中有「」。

可能有人給我如何處理這類情況的一些暗示?

謝謝 肖恩

+4

請不要將數據發佈爲圖片。我們無法剪切和粘貼圖片。 –

+0

對不起,該文件共享於:https://www.dropbox.com/s/zy95y4z3lzws5c6/Initial_Coordinate.txt?dl = 0 –

+0

我沒有做dropbox,這是一個安全風險。請在數據中發佈。 –

回答

0

它可以編寫自己的解析器是這樣的:!

代碼:

def parse_my_file(filename): 
    with open(filename) as f: 
     for line in f: 
      yield [x.strip(',()') 
        for x in re.split(r'\s+', line.strip())[:4]] 

測試代碼:

df = pd.DataFrame(parse_my_file('file1')) 
print(df) 

結果:當我在你的第一個四行類型

0  1  2 3 
0 g1  -16  0 0 
1 gr  10  0 0 
2 D1 -6.858 2.7432 0 
3 D2 -2.286 2.7432 0 

此數據文件被創建。

+0

謝謝!我試過你的解析器規則,它效果很好!告訴k提醒我不要使用複雜的分隔符,儘管我不知道爲什麼,但我認爲你的解決方案指引我走上正軌!我需要更深入地瞭解你的功能。再次感謝你! –

+0

@DarthBEHFANS ,非常歡迎。然而,在所以最好的方式表示感謝是upvote *任何*您認爲有用的問題或答案。在你的問題中,如果其中一個答案非常適合你的問題,你可以將其標記爲接受的答案。有關準則,請參閱[幫助中心](http://stackoverflow.com/help/someone-answers)。 –

0

您可以使用regex pattern作爲CSV的分隔符。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

這樣。

import pandas as pd 

df = pd.read_csv('Initial_Coordinate.txt', sep=r'[()]', header=None) 
print(df) 

然而,而不是創建複雜的分隔符,這是更好地修復它作爲一個簡單的分隔符,然後用熊貓閱讀。

thx

+0

謝謝!我試過了sep = r'[(,)]',它起作用。請問在正則表達式模式下,'[]'是什麼?並且您對「將其修改爲簡單分隔符」的評論意味着創建一些解析器規則並用統一的分隔符替換某些分隔符? –

+1

@DarthBEHFANS「[]」是正則表達式的元字符。這意味着它匹配兩個字符'('和')'中的任何一個。另請參閱https://help.kcura.com/9.0/Content/Relativity/Regular_expressions/Regular_expression_metacharacters.htm –

+1

@DarthBEHFANS>它是否意味着創建一些解析器規則並用統一的分隔符替換某些分隔符? 不,它不是。 我的意思是最好將原始文件(Initial_Coordinate.txt)轉換爲簡單的分隔符。例如製表符。 –