Python 熊猫阅读;分隔的“;文件

Python 熊猫阅读;分隔的“;文件,python,pandas,delimiter,Python,Pandas,Delimiter,您好,我有这样的.txt文件,第一列表示索引,后面是一对“()”中的三列,表示x、y和z坐标 我想将此文件的前四列加载到Dataframe。然而,我发现这很难,因为分隔符首先是“”,然后是“”(“括号内有“,” 有人能给我一些关于如何处理这种情况的提示吗 谢谢大家!! Shawn您可以编写自己的解析器。例如: 代码: def parse_my_file(filename): with open(filename) as f: for line in f:

您好,我有这样的.txt文件,第一列表示索引,后面是一对“()”中的三列,表示x、y和z坐标

我想将此文件的前四列加载到Dataframe。然而,我发现这很难,因为分隔符首先是“”,然后是“”(“括号内有“,”

有人能给我一些关于如何处理这种情况的提示吗

谢谢大家!!
Shawn

您可以编写自己的解析器。例如:

代码:

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
测试代码:

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
结果:

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

此数据文件是在我键入您的前四行时创建的。

您可以编写自己的解析器。类似于:

代码:

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
测试代码:

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
结果:

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

此数据文件是在我键入前四行时创建的。

您可以使用
regex模式作为CSV的分隔符

像这样

import pandas as pd

df = pd.read_csv('Initial_Coordinate.txt', sep=r'[()]', header=None)
print(df)
但是,与其创建复杂的分隔符,不如将其作为简单的分隔符进行修复,然后使用pandas读取


thx

您可以使用
regex模式
作为CSV的分隔符

像这样

import pandas as pd

df = pd.read_csv('Initial_Coordinate.txt', sep=r'[()]', header=None)
print(df)
但是,与其创建复杂的分隔符,不如将其作为简单的分隔符进行修复,然后使用pandas读取


thx

请不要以图片形式发布数据。我们无法剪切和粘贴图片。很抱歉,该文件共享于:I don do dropbox,这是一种安全风险。请在文章中添加数据。请查看以多个分隔符读取文件的方法,并查看中的
usecols
关键字参数。请不要以图片形式发布数据。我们无法剪切并粘贴图片。很抱歉,该文件是在以下位置共享的:我不使用dropbox,这是一种安全风险。请在帖子中输入数据。请查看使用多个分隔符读取文件的方法,并在感谢中查看
usecols
关键字参数!我尝试了sep=r“[(,)]”并且有效。请问“[”是什么'for in regex pattern?以及您对“将其固定为简单分隔符”的评论,这是否意味着创建一些解析器规则并用统一分隔符替换某些分隔符?@DarthBEHFANS“[]”是regex的元字符。这意味着它匹配两个字符中的任何一个('和')“。另请参见@DarthBEHFANS>这是否意味着创建一些解析器规则并用统一的分隔符替换某些分隔符?不,不是。我的意思是最好将原始文件(Initial_Coordinate.txt)转换为简单的分隔符。例如制表符。谢谢!我尝试了sep=r'[(,)]',它可以工作。请问'[]是什么'for in regex pattern?以及您对“将其固定为简单分隔符”的评论,这是否意味着创建一些解析器规则并用统一分隔符替换某些分隔符?@DarthBEHFANS“[]”是regex的元字符。这意味着它匹配两个字符中的任何一个('和')“。另请参见@DarthBEHFANS>这是否意味着创建一些解析器规则并用统一的分隔符替换某些分隔符?不,不是。我的意思是最好转换原始文件(Initial_Coordinate.txt)到一个简单的分隔符。例如制表符。谢谢!我尝试了你的解析器规则,效果很好!告诉k提醒我不要使用复杂的分隔符,尽管我不知道为什么,但我认为你的解决方案指导了我!我需要更深入地研究你的函数。再次感谢你!@DarthBEHFANS,非常欢迎你。Howev呃,所以说谢谢的最好方式是对你觉得有用的任何问题或答案进行投票。在你的问题上,如果其中一个答案非常适合你的问题,你可以将其标记为已接受的答案。请参阅for指南。谢谢!我试过你的解析器规则,效果很好!告诉k提醒我不要使用复杂的分隔符尽管我不知道为什么,但我认为你的解决方案指引我走上正轨!我需要更深入地了解你的职能。再次感谢你!@DarthBEHFANS,非常欢迎你。不过,在这一点上,表达感谢的最好方式是对你认为有用的任何问题或答案进行投票。在你的问题上,如果其中一个答案适合你,请回答r您可以将问题标记为已接受的答案。有关指导原则,请参阅。