2017-05-22 162 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)转换为简单的分隔符。例如制表符。 –